From 64f66132fd173313daae1e0e38b90e0260a94dd1 Mon Sep 17 00:00:00 2001 From: Nejc Zdovc Date: Mon, 9 Mar 2020 16:28:58 +0100 Subject: [PATCH 1/2] Merge pull request #4708 from brave/claim-vg Adds claim api for vg --- .../brave_rewards/browser/rewards_service.cc | 1 + components/brave_rewards/common/pref_names.cc | 1 + components/brave_rewards/common/pref_names.h | 1 + test/BUILD.gn | 1 + vendor/bat-native-ledger/BUILD.gn | 2 + .../include/bat/ledger/ledger_client.h | 2 +- .../contribution/contribution_unblinded.cc | 56 ++---- .../contribution_unblinded_unittest.cc | 6 +- .../contribution/contribution_util.cc | 43 +++++ .../internal/contribution/contribution_util.h | 13 ++ .../contribution_util_unittest.cc | 61 ++++++ .../src/bat/ledger/internal/ledger_impl.cc | 18 +- .../src/bat/ledger/internal/ledger_impl.h | 14 +- .../bat/ledger/internal/ledger_impl_mock.h | 6 +- .../ledger/internal/promotion/promotion.cc | 8 + .../bat/ledger/internal/promotion/promotion.h | 7 + .../internal/promotion/promotion_transfer.cc | 174 ++++++++++++++++++ .../internal/promotion/promotion_transfer.h | 51 +++++ .../internal/promotion/promotion_util.cc | 6 + .../internal/promotion/promotion_util.h | 2 + .../internal/request/promotion_requests.cc | 4 + .../internal/request/promotion_requests.h | 2 + .../src/bat/ledger/internal/state_keys.h | 1 + .../src/bat/ledger/internal/uphold/uphold.cc | 9 +- .../src/bat/ledger/internal/uphold/uphold.h | 1 - .../ledger/internal/uphold/uphold_wallet.cc | 30 +-- .../ledger/internal/uphold/uphold_wallet.h | 1 - .../src/bat/ledger/internal/wallet/wallet.cc | 8 +- 28 files changed, 441 insertions(+), 88 deletions(-) create mode 100644 vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util_unittest.cc create mode 100644 vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.cc create mode 100644 vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.h diff --git a/components/brave_rewards/browser/rewards_service.cc b/components/brave_rewards/browser/rewards_service.cc index 20688550edc1..1bec71a908c4 100644 --- a/components/brave_rewards/browser/rewards_service.cc +++ b/components/brave_rewards/browser/rewards_service.cc @@ -66,6 +66,7 @@ void RewardsService::RegisterProfilePrefs(PrefRegistrySimple* registry) { #endif registry->RegisterUint64Pref(prefs::kStatePromotionLastFetchStamp, 0ull); registry->RegisterBooleanPref(prefs::kStatePromotionCorruptedMigrated, false); + registry->RegisterBooleanPref(prefs::kStateAnonTransferChecked, false); } } // namespace brave_rewards diff --git a/components/brave_rewards/common/pref_names.cc b/components/brave_rewards/common/pref_names.cc index 49a92955583d..24241ce5dc80 100644 --- a/components/brave_rewards/common/pref_names.cc +++ b/components/brave_rewards/common/pref_names.cc @@ -34,5 +34,6 @@ const char kStatePromotionLastFetchStamp[] = "brave.rewards.promotion_last_fetch_stamp"; const char kStatePromotionCorruptedMigrated[] = "brave.rewards.promotion_corrupted_migrated"; +const char kStateAnonTransferChecked[] = "brave.rewards.anon_transfer_checked"; } // namespace prefs } // namespace brave_rewards diff --git a/components/brave_rewards/common/pref_names.h b/components/brave_rewards/common/pref_names.h index dcdf373254e1..06f50160ce76 100644 --- a/components/brave_rewards/common/pref_names.h +++ b/components/brave_rewards/common/pref_names.h @@ -27,6 +27,7 @@ extern const char kStateServerPublisherListStamp[]; extern const char kStateUpholdAnonAddress[]; extern const char kStatePromotionLastFetchStamp[]; extern const char kStatePromotionCorruptedMigrated[]; +extern const char kStateAnonTransferChecked[]; extern const char kUseRewardsStagingServer[]; } // namespace prefs diff --git a/test/BUILD.gn b/test/BUILD.gn index 393c5224729f..247d4b8c0a15 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -290,6 +290,7 @@ test("brave_unit_tests") { sources += [ "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unittest.cc", "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded_unittest.cc", + "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util_unittest.cc", "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/phase_two_unittest.cc", "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/media/helper_unittest.cc", "//brave/vendor/bat-native-ledger/src/bat/ledger/internal/media/reddit_unittest.cc", diff --git a/vendor/bat-native-ledger/BUILD.gn b/vendor/bat-native-ledger/BUILD.gn index 4b95664b768a..e8eb60e39968 100644 --- a/vendor/bat-native-ledger/BUILD.gn +++ b/vendor/bat-native-ledger/BUILD.gn @@ -139,6 +139,8 @@ source_set("ledger") { "src/bat/ledger/internal/media/youtube.cc", "src/bat/ledger/internal/promotion/promotion.cc", "src/bat/ledger/internal/promotion/promotion.h", + "src/bat/ledger/internal/promotion/promotion_transfer.cc", + "src/bat/ledger/internal/promotion/promotion_transfer.h", "src/bat/ledger/internal/promotion/promotion_util.cc", "src/bat/ledger/internal/promotion/promotion_util.h", "src/bat/ledger/internal/properties/ballot_properties.cc", diff --git a/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h b/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h index 514954687d11..96499b5460a8 100644 --- a/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h +++ b/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h @@ -73,7 +73,7 @@ using ResultCallback = std::function; using GetFirstContributionQueueCallback = std::function; using GetPromotionCallback = std::function; -using GetAllUnblindedTokensCallback = std::function; +using GetUnblindedTokenListCallback = std::function; using GetAllPromotionsCallback = std::function; using GetTransactionReportCallback = diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded.cc index 3206ef766c19..d39130431541 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded.cc @@ -11,20 +11,15 @@ #include "bat/ledger/internal/bat_util.h" #include "bat/ledger/internal/ledger_impl.h" #include "bat/ledger/internal/contribution/contribution_unblinded.h" +#include "bat/ledger/internal/contribution/contribution_util.h" #include "bat/ledger/internal/request/promotion_requests.h" #include "brave_base/random.h" #include "net/http/http_status_code.h" -#include "wrapper.hpp" // NOLINT - using std::placeholders::_1; using std::placeholders::_2; using std::placeholders::_3; -using challenge_bypass_ristretto::UnblindedToken; -using challenge_bypass_ristretto::VerificationKey; -using challenge_bypass_ristretto::VerificationSignature; - namespace { std::string ConvertTypeToString(const ledger::RewardsType type) { @@ -46,35 +41,6 @@ std::string ConvertTypeToString(const ledger::RewardsType type) { } } -void GenerateSuggestionMock( - const ledger::UnblindedToken& token, - const std::string& suggestion_encoded, - base::Value* result) { - result->SetStringKey("t", token.token_value); - result->SetStringKey("publicKey", token.public_key); - result->SetStringKey("signature", token.token_value); -} - -void GenerateSuggestion( - const ledger::UnblindedToken& token, - const std::string& suggestion_encoded, - base::Value* result) { - UnblindedToken unblinded = UnblindedToken::decode_base64(token.token_value); - VerificationKey verification_key = unblinded.derive_verification_key(); - VerificationSignature signature = verification_key.sign(suggestion_encoded); - const std::string pre_image = unblinded.preimage().encode_base64(); - - if (challenge_bypass_ristretto::exception_occurred()) { - challenge_bypass_ristretto::TokenException e = - challenge_bypass_ristretto::get_last_exception(); - return; - } - - result->SetStringKey("t", pre_image); - result->SetStringKey("publicKey", token.public_key); - result->SetStringKey("signature", signature.encode_base64()); -} - bool HasTokenExpired(const ledger::UnblindedToken& token) { const uint64_t now = static_cast(base::Time::Now().ToDoubleT()); @@ -95,13 +61,27 @@ std::string GenerateTokenPayload( base::Base64Encode(suggestion_json, &suggestion_encoded); base::Value credentials(base::Value::Type::LIST); - for (auto & item : list) { + for (auto& item : list) { base::Value token(base::Value::Type::DICTIONARY); + bool success; if (ledger::is_testing) { - GenerateSuggestionMock(item, suggestion_encoded, &token); + success = braveledger_contribution::GenerateSuggestionMock( + item.token_value, + item.public_key, + suggestion_encoded, + &token); } else { - GenerateSuggestion(item, suggestion_encoded, &token); + success = braveledger_contribution::GenerateSuggestion( + item.token_value, + item.public_key, + suggestion_encoded, + &token); } + + if (!success) { + continue; + } + credentials.GetList().push_back(std::move(token)); } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded_unittest.cc index 9c04c0bc28a8..dfa767948ce5 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_unblinded_unittest.cc @@ -66,7 +66,7 @@ TEST_F(UnblindedTest, NotEnoughFunds) { ON_CALL(*mock_ledger_impl_, GetAllUnblindedTokens(_)) .WillByDefault( - Invoke([](ledger::GetAllUnblindedTokensCallback callback) { + Invoke([](ledger::GetUnblindedTokenListCallback callback) { ledger::UnblindedTokenList list; auto info = ledger::UnblindedToken::New(); @@ -92,7 +92,7 @@ TEST_F(UnblindedTest, PromotionExpiredDeleteToken) { ON_CALL(*mock_ledger_impl_, GetAllUnblindedTokens(_)) .WillByDefault( - Invoke([](ledger::GetAllUnblindedTokensCallback callback) { + Invoke([](ledger::GetUnblindedTokenListCallback callback) { ledger::UnblindedTokenList list; auto info = ledger::UnblindedToken::New(); @@ -123,7 +123,7 @@ TEST_F(UnblindedTest, PromotionExpiredDeleteTokensNotEnoughFunds) { ON_CALL(*mock_ledger_impl_, GetAllUnblindedTokens(_)) .WillByDefault( - Invoke([](ledger::GetAllUnblindedTokensCallback callback) { + Invoke([](ledger::GetUnblindedTokenListCallback callback) { ledger::UnblindedTokenList list; auto info = ledger::UnblindedToken::New(); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.cc index 6834acbeaac8..aed6ff10aa7d 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.cc @@ -7,6 +7,12 @@ #include "bat/ledger/internal/contribution/contribution_util.h" +#include "wrapper.hpp" // NOLINT + +using challenge_bypass_ristretto::UnblindedToken; +using challenge_bypass_ristretto::VerificationKey; +using challenge_bypass_ristretto::VerificationSignature; + namespace braveledger_contribution { ledger::ReconcileDirections @@ -49,4 +55,41 @@ ledger::ReportType GetReportTypeFromRewardsType( } } +bool GenerateSuggestion( + const std::string& token_value, + const std::string& public_key, + const std::string& suggestion_encoded, + base::Value* result) { + if (token_value.empty() || public_key.empty() || suggestion_encoded.empty()) { + return false; + } + + UnblindedToken unblinded = UnblindedToken::decode_base64(token_value); + VerificationKey verification_key = unblinded.derive_verification_key(); + VerificationSignature signature = verification_key.sign(suggestion_encoded); + const std::string pre_image = unblinded.preimage().encode_base64(); + + if (challenge_bypass_ristretto::exception_occurred()) { + challenge_bypass_ristretto::TokenException e = + challenge_bypass_ristretto::get_last_exception(); + return false; + } + + result->SetStringKey("t", pre_image); + result->SetStringKey("publicKey", public_key); + result->SetStringKey("signature", signature.encode_base64()); + return true; +} + +bool GenerateSuggestionMock( + const std::string& token_value, + const std::string& public_key, + const std::string& suggestion_encoded, + base::Value* result) { + result->SetStringKey("t", token_value); + result->SetStringKey("publicKey", public_key); + result->SetStringKey("signature", token_value); + return true; +} + } // namespace braveledger_contribution diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.h b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.h index f11bd220dc05..a51220096e2f 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util.h @@ -9,6 +9,7 @@ #include #include +#include "base/values.h" #include "bat/ledger/mojom_structs.h" #include "bat/ledger/internal/properties/reconcile_direction_properties.h" @@ -20,6 +21,18 @@ FromContributionQueuePublishersToReconcileDirections( ledger::ReportType GetReportTypeFromRewardsType(const ledger::RewardsType type); +bool GenerateSuggestion( + const std::string& token_value, + const std::string& public_key, + const std::string& suggestion_encoded, + base::Value* result); + +bool GenerateSuggestionMock( + const std::string& token_value, + const std::string& public_key, + const std::string& suggestion_encoded, + base::Value* result); + } // namespace braveledger_contribution #endif // BRAVELEDGER_CONTRIBUTION_CONTRIBUTION_UTIL_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util_unittest.cc new file mode 100644 index 000000000000..02f331adc919 --- /dev/null +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/contribution_util_unittest.cc @@ -0,0 +1,61 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "base/values.h" +#include "bat/ledger/internal/contribution/contribution_util.h" +#include "testing/gtest/include/gtest/gtest.h" + +// npm run test -- brave_unit_tests --filter=ContributionUtilTest.* + +namespace braveledger_contribution { + +class ContributionUtilTest : public testing::Test {}; + +TEST_F(ContributionUtilTest, GenerateSuggestionEmptyToken) { + base::Value token(base::Value::Type::DICTIONARY); + bool success = GenerateSuggestion( + "", + "rqQ1Tz26C4mv33ld7xpcLhuX1sWaD+s7VMnuX6cokT4=", + "some id", + &token); + ASSERT_FALSE(success); +} + +TEST_F(ContributionUtilTest, GenerateSuggestionEmptyPublicKey) { + base::Value token(base::Value::Type::DICTIONARY); + bool success = GenerateSuggestion( + "Twsi4QeUNcOOW/IFnYcGLHgLsfVco0oPZ+cl3YeZMQgb4NB8E29Ts+2/pQA54VksqGpg/DtmPRBV4FlQ1VXbKmiwO9BI7jDXSN33CCb+rSBe1PCG1LtigUOfzaIVF3c5", // NOLINT + "", + "some id", + &token); + ASSERT_FALSE(success); +} + +TEST_F(ContributionUtilTest, GenerateSuggestionEmptyPayload) { + base::Value token(base::Value::Type::DICTIONARY); + bool success = GenerateSuggestion( + "Twsi4QeUNcOOW/IFnYcGLHgLsfVco0oPZ+cl3YeZMQgb4NB8E29Ts+2/pQA54VksqGpg/DtmPRBV4FlQ1VXbKmiwO9BI7jDXSN33CCb+rSBe1PCG1LtigUOfzaIVF3c5", // NOLINT + "rqQ1Tz26C4mv33ld7xpcLhuX1sWaD+s7VMnuX6cokT4=", + "", + &token); + ASSERT_FALSE(success); +} + +TEST_F(ContributionUtilTest, GenerateSuggestionGenerated) { + const std::string public_key = + "rqQ1Tz26C4mv33ld7xpcLhuX1sWaD+s7VMnuX6cokT4="; + base::Value token(base::Value::Type::DICTIONARY); + bool success = GenerateSuggestion( + "Twsi4QeUNcOOW/IFnYcGLHgLsfVco0oPZ+cl3YeZMQgb4NB8E29Ts+2/pQA54VksqGpg/DtmPRBV4FlQ1VXbKmiwO9BI7jDXSN33CCb+rSBe1PCG1LtigUOfzaIVF3c5", // NOLINT + public_key, + "some id", + &token); + ASSERT_TRUE(success); + ASSERT_EQ(*token.FindStringKey("t"), "Twsi4QeUNcOOW/IFnYcGLHgLsfVco0oPZ+cl3YeZMQgb4NB8E29Ts+2/pQA54VksqGpg/DtmPRBV4FlQ1VXbKg=="); // NOLINT + ASSERT_EQ(*token.FindStringKey("publicKey"), public_key); + ASSERT_EQ(*token.FindStringKey("signature"), "qnQvRh1dWoc/YKAGVYgP4PljOoK10T8ryMqLGY6RFc3Gig8mZCzmuGH5IQtVtCZ0x42/pOFKfX3rUpzIL4wPUw=="); // NOLINT +} + +} // namespace braveledger_contribution diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc index 19bd67222305..0613d573da94 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc @@ -1420,8 +1420,8 @@ void LedgerImpl::DisconnectWallet( void LedgerImpl::TransferAnonToExternalWallet( ledger::ExternalWalletPtr wallet, - const bool allow_zero_balance, - ledger::TransferAnonToExternalWalletCallback callback) { + ledger::TransferAnonToExternalWalletCallback callback, + const bool allow_zero_balance) { bat_wallet_->TransferAnonToExternalWallet( std::move(wallet), allow_zero_balance, @@ -1605,7 +1605,7 @@ void LedgerImpl::SaveUnblindedTokenList( } void LedgerImpl::GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) { + ledger::GetUnblindedTokenListCallback callback) { ledger_client_->GetAllUnblindedTokens(callback); } @@ -1680,4 +1680,16 @@ void LedgerImpl::UpdateContributionInfoContributedAmount( callback); } +void LedgerImpl::TransferTokens( + ledger::ExternalWalletPtr wallet, + ledger::ResultCallback callback) { + ledger_client_->TransferTokens(std::move(wallet), callback); +} + +void LedgerImpl::GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) { + ledger_client_->GetUnblindedTokensByPromotionType(promotion_types, callback); +} + } // namespace bat_ledger diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h index 1e0cd8f66b7e..f040bde430b8 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h @@ -493,8 +493,8 @@ class LedgerImpl : public ledger::Ledger, void TransferAnonToExternalWallet( ledger::ExternalWalletPtr wallet, - const bool allow_zero_balance, - ledger::TransferAnonToExternalWalletCallback callback); + ledger::TransferAnonToExternalWalletCallback callback, + const bool allow_zero_balance = false); void ShowNotification( const std::string& type, @@ -594,7 +594,7 @@ class LedgerImpl : public ledger::Ledger, ledger::ResultCallback callback); virtual void GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback); + ledger::GetUnblindedTokenListCallback callback); virtual void DeleteUnblindedTokens( const std::vector& id_list, @@ -638,6 +638,14 @@ class LedgerImpl : public ledger::Ledger, const std::string& publisher_key, ledger::ResultCallback callback); + void TransferTokens( + ledger::ExternalWalletPtr wallet, + ledger::ResultCallback callback); + + void GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback); + private: void InitializeConfirmations( ledger::InitializeCallback callback); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h index d4dce194acdc..655d4dd96b29 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h @@ -471,8 +471,8 @@ class MockLedgerImpl : public LedgerImpl { MOCK_METHOD3(TransferAnonToExternalWallet, void(ledger::ExternalWalletPtr, - const bool, - ledger::TransferAnonToExternalWalletCallback)); + ledger::TransferAnonToExternalWalletCallback, + const bool)); MOCK_METHOD3(ShowNotification, void(const std::string&, @@ -563,7 +563,7 @@ class MockLedgerImpl : public LedgerImpl { ledger::UnblindedTokenList, ledger::ResultCallback)); MOCK_METHOD1(GetAllUnblindedTokens, - void(ledger::GetAllUnblindedTokensCallback)); + void(ledger::GetUnblindedTokenListCallback)); MOCK_METHOD2(DeleteUnblindedTokens, void(const std::vector&, ledger::ResultCallback)); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.cc index 61b2b4cd0e6f..ebc0214d3258 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.cc @@ -25,6 +25,7 @@ #include "bat/ledger/internal/common/security_helper.h" #include "bat/ledger/internal/common/time_util.h" #include "bat/ledger/internal/promotion/promotion_util.h" +#include "bat/ledger/internal/promotion/promotion_transfer.h" #include "brave_base/random.h" #include "net/http/http_status_code.h" @@ -80,6 +81,7 @@ void HandleExpiredPromotions( Promotion::Promotion(bat_ledger::LedgerImpl* ledger) : attestation_(std::make_unique (ledger)), + transfer_(std::make_unique(ledger)), ledger_(ledger) { } @@ -910,4 +912,10 @@ void Promotion::PromotionListDeleted(const ledger::Result result) { ledger_->SetBooleanState(ledger::kStatePromotionCorruptedMigrated, true); } +void Promotion::TransferTokens( + ledger::ExternalWalletPtr wallet, + ledger::ResultCallback callback) { + transfer_->Start(std::move(wallet), callback); +} + } // namespace braveledger_promotion diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.h b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.h index 89d6b4184e7b..5caf960a4c2e 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion.h @@ -21,6 +21,8 @@ class LedgerImpl; namespace braveledger_promotion { +class PromotionTransfer; + class Promotion { public: explicit Promotion(bat_ledger::LedgerImpl* ledger); @@ -47,6 +49,10 @@ class Promotion { ledger::PromotionPtr promotion, ledger::ResultCallback callback); + void TransferTokens( + ledger::ExternalWalletPtr wallet, + ledger::ResultCallback callback); + private: void OnFetch( const int response_status_code, @@ -152,6 +158,7 @@ class Promotion { void PromotionListDeleted(const ledger::Result result); std::unique_ptr attestation_; + std::unique_ptr transfer_; bat_ledger::LedgerImpl* ledger_; // NOT OWNED uint32_t last_check_timer_id_; uint32_t retry_timer_id_; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.cc new file mode 100644 index 000000000000..5177d9145d21 --- /dev/null +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.cc @@ -0,0 +1,174 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include + +#include "base/json/json_writer.h" +#include "base/values.h" +#include "bat/ledger/internal/contribution/contribution_util.h" +#include "bat/ledger/internal/ledger_impl.h" +#include "bat/ledger/internal/promotion/promotion_transfer.h" +#include "bat/ledger/internal/promotion/promotion_util.h" +#include "bat/ledger/internal/request/promotion_requests.h" +#include "bat/ledger/internal/request/request_util.h" +#include "bat/ledger/internal/state_keys.h" +#include "net/http/http_status_code.h" + +using std::placeholders::_1; +using std::placeholders::_2; +using std::placeholders::_3; + +namespace braveledger_promotion { + +PromotionTransfer::PromotionTransfer(bat_ledger::LedgerImpl* ledger) : + ledger_(ledger) { + DCHECK(ledger_); +} + +PromotionTransfer::~PromotionTransfer() = default; + +void PromotionTransfer::Start( + ledger::ExternalWalletPtr wallet, + ledger::ResultCallback callback) { + // we only need to call old anon api once + if (ledger_->GetBooleanState(ledger::kStateAnonTransferChecked)) { + GetEligibleTokens(callback); + return; + } + + if (!wallet) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << "Wallet is empty"; + callback(ledger::Result::LEDGER_ERROR); + return; + } + + auto transfer_callback = std::bind(&PromotionTransfer::OnAnonExternalWallet, + this, + _1, + callback); + + ledger_->TransferAnonToExternalWallet( + std::move(wallet), + transfer_callback, + true); +} + +void PromotionTransfer::OnAnonExternalWallet( + const ledger::Result result, + ledger::ResultCallback callback) { + if (result != ledger::Result::LEDGER_OK) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << "Initial transfer failed"; + callback(ledger::Result::LEDGER_ERROR); + return; + } + + ledger_->SetBooleanState(ledger::kStateAnonTransferChecked, true); + GetEligibleTokens(callback); +} + +void PromotionTransfer::GetEligibleTokens(ledger::ResultCallback callback) { + auto tokens_callback = std::bind(&PromotionTransfer::SendTokens, + this, + _1, + callback); + + ledger_->GetUnblindedTokensByPromotionType( + GetEligiblePromotions(), + tokens_callback); +} + +void PromotionTransfer::SendTokens( + ledger::UnblindedTokenList list, + ledger::ResultCallback callback) { + if (list.empty()) { + callback(ledger::Result::LEDGER_OK); + return; + } + + base::Value credentials(base::Value::Type::LIST); + std::vector tokens_ids; + + for (auto& item : list) { + if (!item) { + continue; + } + + base::Value token(base::Value::Type::DICTIONARY); + bool success = false; + if (ledger::is_testing) { + success = braveledger_contribution::GenerateSuggestionMock( + item->token_value, + item->public_key, + ledger_->GetPaymentId(), + &token); + } else { + success = braveledger_contribution::GenerateSuggestion( + item->token_value, + item->public_key, + ledger_->GetPaymentId(), + &token); + } + + if (!success) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) + << "Token was not generated successfully. Token: " + << item->token_value; + continue; + } + + credentials.GetList().push_back(std::move(token)); + tokens_ids.push_back(std::to_string(item->id)); + } + + base::Value body(base::Value::Type::DICTIONARY); + body.SetStringKey("paymentId", ledger_->GetPaymentId()); + body.SetKey("credentials", std::move(credentials)); + + std::string json; + base::JSONWriter::Write(body, &json); + + const std::string url = braveledger_request_util::GetTransferTokens(); + + auto url_callback = std::bind(&PromotionTransfer::DeleteTokens, + this, + _1, + _2, + _3, + tokens_ids, + std::move(callback)); + + ledger::WalletInfoProperties wallet_info = ledger_->GetWalletInfo(); + const auto headers = braveledger_request_util::BuildSignHeaders( + "post /v1/suggestions/claim", + json, + ledger_->GetPaymentId(), + wallet_info.key_info_seed); + + ledger_->LoadURL( + url, + headers, + json, + "application/json; charset=utf-8", + ledger::UrlMethod::POST, + url_callback); +} + +void PromotionTransfer::DeleteTokens( + const int response_status_code, + const std::string& response, + const std::map& headers, + const std::vector& sent_ids, + ledger::ResultCallback callback) { + ledger_->LogResponse(__func__, response_status_code, response, headers); + + if (response_status_code != net::HTTP_OK) { + callback(ledger::Result::LEDGER_ERROR); + return; + } + + ledger_->DeleteUnblindedTokens(sent_ids, callback); +} + +} // namespace braveledger_promotion diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.h b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.h new file mode 100644 index 000000000000..00b9c70e50a8 --- /dev/null +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_transfer.h @@ -0,0 +1,51 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVELEDGER_PROMOTION_TRANSFER_H_ +#define BRAVELEDGER_PROMOTION_TRANSFER_H_ + +#include +#include +#include + +#include "bat/ledger/ledger.h" + +namespace bat_ledger { +class LedgerImpl; +} + +namespace braveledger_promotion { + +class PromotionTransfer { + public: + explicit PromotionTransfer(bat_ledger::LedgerImpl* ledger); + ~PromotionTransfer(); + + void Start(ledger::ExternalWalletPtr wallet, ledger::ResultCallback callback); + + private: + void OnAnonExternalWallet( + const ledger::Result result, + ledger::ResultCallback callback); + + void GetEligibleTokens(ledger::ResultCallback callback); + + void SendTokens( + ledger::UnblindedTokenList list, + ledger::ResultCallback callback); + + void DeleteTokens( + const int response_status_code, + const std::string& response, + const std::map& headers, + const std::vector& sent_ids, + ledger::ResultCallback callback); + + bat_ledger::LedgerImpl* ledger_; // NOT OWNED +}; + +} // namespace braveledger_promotion + +#endif // BRAVELEDGER_PROMOTION_TRANSFER_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.cc index baddbce39290..063274b7c35f 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.cc @@ -387,4 +387,10 @@ bool VerifyPublicKey(const ledger::PromotionPtr promotion) { return false; } +std::vector GetEligiblePromotions() { + return { + ledger::PromotionType::ADS + }; +} + } // namespace braveledger_promotion diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.h b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.h index 3581a552f084..33e4f8f80c86 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/promotion/promotion_util.h @@ -49,6 +49,8 @@ bool UnBlindTokensMock( bool VerifyPublicKey(const ledger::PromotionPtr promotion); +std::vector GetEligiblePromotions(); + } // namespace braveledger_promotion #endif // BRAVELEDGER_PROMOTION_PROMOTION_UTIL_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.cc index 28f2328fcae1..06e184d7deb5 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.cc @@ -55,4 +55,8 @@ std::string ReportClobberedClaimsUrl() { ServerTypes::kPromotion); } +std::string GetTransferTokens() { + return BuildUrl("/suggestions/claim", PREFIX_V1, ServerTypes::kPromotion); +} + } // namespace braveledger_request_util diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.h b/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.h index 2c04f0c87452..d60ab4e80234 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/request/promotion_requests.h @@ -24,6 +24,8 @@ std::string GetReedemSuggestionsUrl(); std::string ReportClobberedClaimsUrl(); +std::string GetTransferTokens(); + } // namespace braveledger_request_util #endif // BRAVELEDGER_COMMON_PROMOTION_REQUESTS_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/state_keys.h b/vendor/bat-native-ledger/src/bat/ledger/internal/state_keys.h index dd773bf940af..c833c60e4c24 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/state_keys.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/state_keys.h @@ -14,6 +14,7 @@ namespace ledger { const char kStatePromotionLastFetchStamp[] = "promotion_last_fetch_stamp"; const char kStatePromotionCorruptedMigrated[] = "promotion_corrupted_migrated"; + const char kStateAnonTransferChecked[] = "anon_transfer_checked"; } // namespace ledger #endif // BRAVELEDGER_STATE_KEYS_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.cc index c5670c4858c4..e93eaf42f86d 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.cc @@ -200,7 +200,6 @@ void Uphold::WalletAuthorization( void Uphold::TransferAnonToExternalWallet( ledger::ExternalWalletPtr wallet, - const bool allow_zero_balance, ledger::ExternalWalletCallback callback) { auto transfer_callback = std::bind( &Uphold::OnTransferAnonToExternalWalletCallback, @@ -210,10 +209,7 @@ void Uphold::TransferAnonToExternalWallet( _1); // transfer funds from anon wallet to uphold - ledger_->TransferAnonToExternalWallet( - std::move(wallet), - allow_zero_balance, - transfer_callback); + ledger_->TransferAnonToExternalWallet(std::move(wallet), transfer_callback); } void Uphold::GenerateExternalWallet( @@ -233,7 +229,8 @@ void Uphold::OnTransferAnonToExternalWalletCallback( const ledger::ExternalWallet& wallet, ledger::Result result) { auto wallet_ptr = ledger::ExternalWallet::New(wallet); - if (result == ledger::Result::LEDGER_OK) { + if (result == ledger::Result::LEDGER_OK || + result == ledger::Result::ALREADY_EXISTS) { wallet_ptr->transferred = true; } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.h b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.h index 51f1dba9aebf..9e999cad6f22 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold.h @@ -68,7 +68,6 @@ class Uphold { void TransferAnonToExternalWallet( ledger::ExternalWalletPtr wallet, - const bool allow_zero_balance, ledger::ExternalWalletCallback callback); void GenerateExternalWallet( diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.cc index c606fb9e23c3..d9d73e282098 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.cc @@ -96,33 +96,16 @@ void UpholdWallet::OnGenerate( wallet_ptr->user_name = user.name; - bool allow_zero_balance = false; - if (user.status != UserStatus::OK) { wallet_ptr->status = ledger::WalletStatus::PENDING; } - const auto current_status = wallet_ptr->status; wallet_ptr = SetStatus(user, std::move(wallet_ptr)); - if (current_status == ledger::WalletStatus::CONNECTED && - wallet_ptr->status == ledger::WalletStatus::VERIFIED) { - allow_zero_balance = true; - } - - // if we don't have anon address we need to force claim so that server - // can save it - const std::string anon_address = - ledger_->GetStringState(ledger::kStateUpholdAnonAddress); - if (anon_address.empty()) { - allow_zero_balance = true; - } - if (wallet_ptr->address.empty()) { auto card_callback = std::bind( &UpholdWallet::OnCreateCard, this, - allow_zero_balance, *wallet_ptr, callback, _1, @@ -132,10 +115,8 @@ void UpholdWallet::OnGenerate( } if (user.verified) { - uphold_->TransferAnonToExternalWallet( - std::move(wallet_ptr), - allow_zero_balance, - callback); + ledger_->TransferTokens(wallet_ptr->Clone(), [](const ledger::Result){}); + uphold_->TransferAnonToExternalWallet(std::move(wallet_ptr), callback); return; } @@ -144,7 +125,6 @@ void UpholdWallet::OnGenerate( } void UpholdWallet::OnCreateCard( - const bool allow_zero_balance, const ledger::ExternalWallet& wallet, ledger::ExternalWalletCallback callback, const ledger::Result result, @@ -159,10 +139,8 @@ void UpholdWallet::OnCreateCard( wallet_ptr = GenerateLinks(std::move(wallet_ptr)); if (wallet_ptr->status == ledger::WalletStatus::VERIFIED) { - uphold_->TransferAnonToExternalWallet( - std::move(wallet_ptr), - allow_zero_balance, - callback); + ledger_->TransferTokens(wallet_ptr->Clone(), [](const ledger::Result){}); + uphold_->TransferAnonToExternalWallet(std::move(wallet_ptr), callback); return; } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.h b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.h index 54c167d9de38..dd79f25a09dd 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_wallet.h @@ -36,7 +36,6 @@ class UpholdWallet { ledger::ExternalWalletCallback callback); void OnCreateCard( - const bool allow_zero_balance, const ledger::ExternalWallet& wallet, ledger::ExternalWalletCallback callback, const ledger::Result result, diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc index 45f2a31cb2c9..0e71976b7c90 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc @@ -268,11 +268,14 @@ void Wallet::OnTransferAnonToExternalWallet( ledger::TransferAnonToExternalWalletCallback callback) { ledger_->LogResponse(__func__, response_status_code, response, headers); - if (response_status_code == net::HTTP_OK || - response_status_code == net::HTTP_CONFLICT) { + if (response_status_code == net::HTTP_OK) { callback(ledger::Result::LEDGER_OK); return; } + if (response_status_code == net::HTTP_CONFLICT) { + callback(ledger::Result::ALREADY_EXISTS); + return; + } callback(ledger::Result::LEDGER_ERROR); } @@ -281,7 +284,6 @@ void Wallet::TransferAnonToExternalWallet( ledger::ExternalWalletPtr wallet, const bool allow_zero_balance, ledger::TransferAnonToExternalWalletCallback callback) { - FetchBalance(std::bind(&Wallet::OnTransferAnonToExternalWalletBalance, this, _1, From 39c7f377e8180ed43a59019c9dbb54a57626a1df Mon Sep 17 00:00:00 2001 From: NejcZdovc Date: Thu, 12 Mar 2020 22:01:21 +0100 Subject: [PATCH 2/2] Resolves merge conflicts --- .../database/database_unblinded_token.cc | 32 +++++++++++++++++ .../database/database_unblinded_token.h | 4 +++ .../database/publisher_info_database.cc | 6 ++++ .../database/publisher_info_database.h | 3 ++ .../browser/rewards_service_impl.cc | 35 +++++++++++++++++-- .../browser/rewards_service_impl.h | 12 +++++-- .../bat_ledger_client_mojo_proxy.cc | 19 ++++++++-- .../bat_ledger/bat_ledger_client_mojo_proxy.h | 6 +++- .../public/cpp/ledger_client_mojo_proxy.cc | 27 ++++++++++++++ .../public/cpp/ledger_client_mojo_proxy.h | 8 +++++ .../public/interfaces/bat_ledger.mojom | 2 ++ .../internal/confirmations_client_mock.h | 6 +++- .../include/bat/ledger/ledger_client.h | 6 +++- .../bat/ledger/internal/ledger_client_mock.h | 6 +++- .../src/bat/ledger/internal/ledger_impl.cc | 2 +- vendor/brave-ios/Ledger/BATBraveLedger.mm | 2 +- .../Ledger/Generated/NativeLedgerClient.h | 3 +- .../Ledger/Generated/NativeLedgerClient.mm | 5 ++- .../Generated/NativeLedgerClientBridge.h | 2 +- 19 files changed, 171 insertions(+), 15 deletions(-) diff --git a/components/brave_rewards/browser/database/database_unblinded_token.cc b/components/brave_rewards/browser/database/database_unblinded_token.cc index da1a49250e3f..50df87e3ca0d 100644 --- a/components/brave_rewards/browser/database/database_unblinded_token.cc +++ b/components/brave_rewards/browser/database/database_unblinded_token.cc @@ -273,4 +273,36 @@ bool DatabaseUnblindedToken::DeleteRecordsForPromotion( return statement.Run(); } +ledger::UnblindedTokenList DatabaseUnblindedToken::GetRecordsByPromotionType( + sql::Database* db, + const std::vector& promotion_types) { + std::vector in_case; + + for (const auto& type : promotion_types) { + in_case.push_back(std::to_string(static_cast(type))); + } + + const std::string query = base::StringPrintf( + "SELECT u.token_id, u.token_value, u.public_key, u.value FROM %s as u " + "INNER JOIN promotion as p ON p.promotion_id = u.promotion_id " + "WHERE p.type IN (%s)", + table_name_, + base::JoinString(in_case, ",").c_str()); + + sql::Statement statement(db->GetUniqueStatement(query.c_str())); + + ledger::UnblindedTokenList list; + while (statement.Step()) { + auto info = ledger::UnblindedToken::New(); + info->id = statement.ColumnInt64(0); + info->token_value = statement.ColumnString(1); + info->public_key = statement.ColumnString(2); + info->value = statement.ColumnDouble(3); + + list.push_back(std::move(info)); + } + + return list; +} + } // namespace brave_rewards diff --git a/components/brave_rewards/browser/database/database_unblinded_token.h b/components/brave_rewards/browser/database/database_unblinded_token.h index 5217239424d0..29d494195d98 100644 --- a/components/brave_rewards/browser/database/database_unblinded_token.h +++ b/components/brave_rewards/browser/database/database_unblinded_token.h @@ -35,6 +35,10 @@ class DatabaseUnblindedToken: public DatabaseTable { sql::Database* db, const std::string& promotion_id); + ledger::UnblindedTokenList GetRecordsByPromotionType( + sql::Database* db, + const std::vector& promotion_types); + private: bool CreateTableV10(sql::Database* db); diff --git a/components/brave_rewards/browser/database/publisher_info_database.cc b/components/brave_rewards/browser/database/publisher_info_database.cc index 190c85596253..2f2b25192b0f 100644 --- a/components/brave_rewards/browser/database/publisher_info_database.cc +++ b/components/brave_rewards/browser/database/publisher_info_database.cc @@ -572,6 +572,12 @@ bool PublisherInfoDatabase::DeleteUnblindedTokensForPromotion( promotion_id); } +ledger::UnblindedTokenList +PublisherInfoDatabase::GetUnblindedTokensByPromotionType( + const std::vector& promotion_types) { + return unblinded_token_->GetRecordsByPromotionType(&GetDB(), promotion_types); +} + /** * * GENERAL diff --git a/components/brave_rewards/browser/database/publisher_info_database.h b/components/brave_rewards/browser/database/publisher_info_database.h index edb7d0913485..2970a0c91873 100644 --- a/components/brave_rewards/browser/database/publisher_info_database.h +++ b/components/brave_rewards/browser/database/publisher_info_database.h @@ -164,6 +164,9 @@ class PublisherInfoDatabase { const std::string& contribution_id, const std::string& publisher_key); + ledger::UnblindedTokenList GetUnblindedTokensByPromotionType( + const std::vector& promotion_types); + // Vacuums the database. This will cause sqlite to defragment and collect // unused space in the file. It can be VERY SLOW. void Vacuum(); diff --git a/components/brave_rewards/browser/rewards_service_impl.cc b/components/brave_rewards/browser/rewards_service_impl.cc index bf8ef58033e9..571a1d4b110c 100644 --- a/components/brave_rewards/browser/rewards_service_impl.cc +++ b/components/brave_rewards/browser/rewards_service_impl.cc @@ -4304,7 +4304,7 @@ ledger::UnblindedTokenList GetAllUnblindedTokensOnFileTaskRunner( } void RewardsServiceImpl::GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) { + ledger::GetUnblindedTokenListCallback callback) { base::PostTaskAndReplyWithResult( file_task_runner_.get(), FROM_HERE, @@ -4316,7 +4316,7 @@ void RewardsServiceImpl::GetAllUnblindedTokens( } void RewardsServiceImpl::OnGetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback, + ledger::GetUnblindedTokenListCallback callback, ledger::UnblindedTokenList list) { callback(std::move(list)); } @@ -4749,4 +4749,35 @@ void RewardsServiceImpl::ReconcileStampReset() { } } +ledger::UnblindedTokenList GetUnblindedTokensByPromotionTypeOnFileTaskRunner( + PublisherInfoDatabase* backend, + const std::vector& promotion_types) { + DCHECK(backend); + if (!backend) { + return {}; + } + + return backend->GetUnblindedTokensByPromotionType(promotion_types); +} + +void RewardsServiceImpl::GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) { + base::PostTaskAndReplyWithResult( + file_task_runner_.get(), + FROM_HERE, + base::BindOnce(&GetUnblindedTokensByPromotionTypeOnFileTaskRunner, + publisher_info_backend_.get(), + promotion_types), + base::BindOnce(&RewardsServiceImpl::OnGetUnblindedTokensByPromotionType, + AsWeakPtr(), + callback)); +} + +void RewardsServiceImpl::OnGetUnblindedTokensByPromotionType( + ledger::GetUnblindedTokenListCallback callback, + ledger::UnblindedTokenList list) { + callback(std::move(list)); +} + } // namespace brave_rewards diff --git a/components/brave_rewards/browser/rewards_service_impl.h b/components/brave_rewards/browser/rewards_service_impl.h index d497f6db6523..f95f8d740a22 100644 --- a/components/brave_rewards/browser/rewards_service_impl.h +++ b/components/brave_rewards/browser/rewards_service_impl.h @@ -735,7 +735,7 @@ class RewardsServiceImpl : public RewardsService, ledger::ResultCallback callback) override; void GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) override; + ledger::GetUnblindedTokenListCallback callback) override; void DeleteUnblindedTokens( const std::vector& id_list, @@ -779,6 +779,10 @@ class RewardsServiceImpl : public RewardsService, void ReconcileStampReset() override; + void GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) override; + // end ledger::LedgerClient // Mojo Proxy methods @@ -830,7 +834,7 @@ class RewardsServiceImpl : public RewardsService, ledger::PromotionPtr info); void OnGetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback, + ledger::GetUnblindedTokenListCallback callback, ledger::UnblindedTokenList list); void OnGetAllPromotions( @@ -877,6 +881,10 @@ class RewardsServiceImpl : public RewardsService, ledger::GetContributionInfoCallback callback, ledger::ContributionInfoPtr info); + void OnGetUnblindedTokensByPromotionType( + ledger::GetUnblindedTokenListCallback callback, + ledger::UnblindedTokenList list); + #if defined(OS_ANDROID) ledger::Environment GetServerEnvironmentForAndroid(); void CreateWalletAttestationResult( diff --git a/components/services/bat_ledger/bat_ledger_client_mojo_proxy.cc b/components/services/bat_ledger/bat_ledger_client_mojo_proxy.cc index 043d77b884a7..5a3215a7f35a 100644 --- a/components/services/bat_ledger/bat_ledger_client_mojo_proxy.cc +++ b/components/services/bat_ledger/bat_ledger_client_mojo_proxy.cc @@ -1011,13 +1011,13 @@ void BatLedgerClientMojoProxy::SaveUnblindedTokenList( } void OnGetAllUnblindedTokens( - const ledger::GetAllUnblindedTokensCallback& callback, + const ledger::GetUnblindedTokenListCallback& callback, ledger::UnblindedTokenList list) { callback(std::move(list)); } void BatLedgerClientMojoProxy::GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) { + ledger::GetUnblindedTokenListCallback callback) { bat_ledger_client_->GetAllUnblindedTokens( base::BindOnce(&OnGetAllUnblindedTokens, std::move(callback))); } @@ -1146,4 +1146,19 @@ void BatLedgerClientMojoProxy::ReconcileStampReset() { bat_ledger_client_->ReconcileStampReset(); } +void OnGetUnblindedTokensByPromotionType( + ledger::GetUnblindedTokenListCallback callback, + ledger::UnblindedTokenList list) { + callback(std::move(list)); +} + +void BatLedgerClientMojoProxy::GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) { + bat_ledger_client_->GetUnblindedTokensByPromotionType( + promotion_types, + base::BindOnce(&OnGetUnblindedTokensByPromotionType, + std::move(callback))); +} + } // namespace bat_ledger diff --git a/components/services/bat_ledger/bat_ledger_client_mojo_proxy.h b/components/services/bat_ledger/bat_ledger_client_mojo_proxy.h index e2644b41513f..a7971e34eea0 100644 --- a/components/services/bat_ledger/bat_ledger_client_mojo_proxy.h +++ b/components/services/bat_ledger/bat_ledger_client_mojo_proxy.h @@ -224,7 +224,7 @@ class BatLedgerClientMojoProxy : public ledger::LedgerClient, ledger::ResultCallback callback) override; void GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) override; + ledger::GetUnblindedTokenListCallback callback) override; void DeleteUnblindedTokens( const std::vector& id_list, @@ -268,6 +268,10 @@ class BatLedgerClientMojoProxy : public ledger::LedgerClient, void ReconcileStampReset() override; + void GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) override; + private: bool Connected() const; diff --git a/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.cc b/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.cc index ec7847a534e9..f60dadf75036 100644 --- a/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.cc +++ b/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.cc @@ -1391,4 +1391,31 @@ void LedgerClientMojoProxy::ReconcileStampReset() { ledger_client_->ReconcileStampReset(); } +// static +void LedgerClientMojoProxy::OnGetUnblindedTokensByPromotionType( + CallbackHolder* holder, + ledger::UnblindedTokenList list) { + DCHECK(holder); + if (holder->is_valid()) { + std::move(holder->get()).Run(std::move(list)); + } + delete holder; +} + +void LedgerClientMojoProxy::GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + GetUnblindedTokensByPromotionTypeCallback callback) { + auto* holder = + new CallbackHolder( + AsWeakPtr(), + std::move(callback)); + ledger_client_->GetUnblindedTokensByPromotionType( + promotion_types, + std::bind( + LedgerClientMojoProxy::OnGetUnblindedTokensByPromotionType, + holder, + _1)); +} + + } // namespace bat_ledger diff --git a/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.h b/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.h index 5fb0d303f1f6..bc8d025c96b0 100644 --- a/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.h +++ b/components/services/bat_ledger/public/cpp/ledger_client_mojo_proxy.h @@ -288,6 +288,10 @@ class LedgerClientMojoProxy : public mojom::BatLedgerClient, void ReconcileStampReset() override; + void GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + GetUnblindedTokensByPromotionTypeCallback callback) override; + private: // workaround to pass base::OnceCallback into std::bind // also serves as a wrapper for passing ledger::LedgerCallbackHandler* @@ -528,6 +532,10 @@ class LedgerClientMojoProxy : public mojom::BatLedgerClient, CallbackHolder* holder, const ledger::Result result); + static void OnGetUnblindedTokensByPromotionType( + CallbackHolder* holder, + ledger::UnblindedTokenList list); + ledger::LedgerClient* ledger_client_; DISALLOW_COPY_AND_ASSIGN(LedgerClientMojoProxy); diff --git a/components/services/bat_ledger/public/interfaces/bat_ledger.mojom b/components/services/bat_ledger/public/interfaces/bat_ledger.mojom index b99811a70e86..76a95aa5055f 100644 --- a/components/services/bat_ledger/public/interfaces/bat_ledger.mojom +++ b/components/services/bat_ledger/public/interfaces/bat_ledger.mojom @@ -309,4 +309,6 @@ interface BatLedgerClient { UpdateContributionInfoContributedAmount(string contribution_id, string publisher_key) => (ledger.mojom.Result result); ReconcileStampReset(); + + GetUnblindedTokensByPromotionType(array types) => (array list); }; diff --git a/vendor/bat-native-confirmations/src/bat/confirmations/internal/confirmations_client_mock.h b/vendor/bat-native-confirmations/src/bat/confirmations/internal/confirmations_client_mock.h index fa82ac459166..8f86363231d1 100644 --- a/vendor/bat-native-confirmations/src/bat/confirmations/internal/confirmations_client_mock.h +++ b/vendor/bat-native-confirmations/src/bat/confirmations/internal/confirmations_client_mock.h @@ -364,7 +364,7 @@ class MockConfirmationsClient : public ConfirmationsClient { ledger::ResultCallback callback)); MOCK_METHOD1(GetAllUnblindedTokens, void( - ledger::GetAllUnblindedTokensCallback callback)); + ledger::GetUnblindedTokenListCallback callback)); MOCK_METHOD2(DeleteUnblindedTokens, void( const std::vector& id_list, @@ -407,6 +407,10 @@ class MockConfirmationsClient : public ConfirmationsClient { ledger::ResultCallback callback)); MOCK_METHOD0(ReconcileStampReset, void()); + + MOCK_METHOD2(GetUnblindedTokensByPromotionType, void( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback)); }; } // namespace confirmations diff --git a/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h b/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h index 96499b5460a8..5de1198adff5 100644 --- a/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h +++ b/vendor/bat-native-ledger/include/bat/ledger/ledger_client.h @@ -322,7 +322,7 @@ class LEDGER_EXPORT LedgerClient { ledger::ResultCallback callback) = 0; virtual void GetAllUnblindedTokens( - ledger::GetAllUnblindedTokensCallback callback) = 0; + ledger::GetUnblindedTokenListCallback callback) = 0; virtual void DeleteUnblindedTokens( const std::vector& id_list, @@ -365,6 +365,10 @@ class LEDGER_EXPORT LedgerClient { ResultCallback callback) = 0; virtual void ReconcileStampReset() = 0; + + virtual void GetUnblindedTokensByPromotionType( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback) = 0; }; } // namespace ledger diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_client_mock.h b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_client_mock.h index eb5cc4c583a6..9f3cac1a1c2d 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_client_mock.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_client_mock.h @@ -364,7 +364,7 @@ class MockLedgerClient : public LedgerClient { ledger::ResultCallback callback)); MOCK_METHOD1(GetAllUnblindedTokens, void( - ledger::GetAllUnblindedTokensCallback callback)); + ledger::GetUnblindedTokenListCallback callback)); MOCK_METHOD2(DeleteUnblindedTokens, void( const std::vector& id_list, @@ -406,6 +406,10 @@ class MockLedgerClient : public LedgerClient { ResultCallback callback)); MOCK_METHOD0(ReconcileStampReset, void()); + + MOCK_METHOD2(GetUnblindedTokensByPromotionType, void( + const std::vector& promotion_types, + ledger::GetUnblindedTokenListCallback callback)); }; } // namespace ledger diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc index 0613d573da94..e3e2d0b75e3a 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc @@ -1683,7 +1683,7 @@ void LedgerImpl::UpdateContributionInfoContributedAmount( void LedgerImpl::TransferTokens( ledger::ExternalWalletPtr wallet, ledger::ResultCallback callback) { - ledger_client_->TransferTokens(std::move(wallet), callback); + bat_promotion_->TransferTokens(std::move(wallet), callback); } void LedgerImpl::GetUnblindedTokensByPromotionType( diff --git a/vendor/brave-ios/Ledger/BATBraveLedger.mm b/vendor/brave-ios/Ledger/BATBraveLedger.mm index c3c8d1e0dc9f..44f684ded8bc 100644 --- a/vendor/brave-ios/Ledger/BATBraveLedger.mm +++ b/vendor/brave-ios/Ledger/BATBraveLedger.mm @@ -1967,7 +1967,7 @@ - (void)saveUnblindedTokenList:(ledger::UnblindedTokenList)list callback:(ledger // } } -- (void)getAllUnblindedTokens:(ledger::GetAllUnblindedTokensCallback)callback +- (void)getAllUnblindedTokens:(ledger::GetUnblindedTokenListCallback)callback { const auto tokens = [BATLedgerDatabase allUnblindedTokens]; callback(VectorFromNSArray(tokens, ^ledger::UnblindedTokenPtr(BATUnblindedToken *info){ diff --git a/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.h b/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.h index 736e518127b9..f15299dc2873 100644 --- a/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.h +++ b/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.h @@ -93,7 +93,7 @@ class NativeLedgerClient : public ledger::LedgerClient { void GetPromotion(const std::string& id, ledger::GetPromotionCallback callback) override; void DeletePromotionList(const std::vector& id_list, ledger::ResultCallback callback) override; void SaveUnblindedTokenList(ledger::UnblindedTokenList list, ledger::ResultCallback callback) override; - void GetAllUnblindedTokens(ledger::GetAllUnblindedTokensCallback callback) override; + void GetAllUnblindedTokens(ledger::GetUnblindedTokenListCallback callback) override; void DeleteUnblindedTokens(const std::vector& id_list, ledger::ResultCallback callback) override; void DeleteUnblindedTokensForPromotion(const std::string& promotion_id, ledger::ResultCallback callback) override; ledger::ClientInfoPtr GetClientInfo() override; @@ -105,4 +105,5 @@ class NativeLedgerClient : public ledger::LedgerClient { void UpdateContributionInfoStepAndCount(const std::string& contribution_id, const ledger::ContributionStep step, const int32_t retry_count, ledger::ResultCallback callback) override; void UpdateContributionInfoContributedAmount(const std::string& contribution_id, const std::string& publisher_key, ledger::ResultCallback callback) override; void ReconcileStampReset() override; + void GetUnblindedTokensByPromotionType(const std::vector& promotion_types, ledger::GetUnblindedTokenListCallback callback) override; }; diff --git a/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.mm b/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.mm index 62191898f97f..3e87cf7586cd 100644 --- a/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.mm +++ b/vendor/brave-ios/Ledger/Generated/NativeLedgerClient.mm @@ -243,7 +243,7 @@ void NativeLedgerClient::SaveUnblindedTokenList(ledger::UnblindedTokenList list, ledger::ResultCallback callback) { return [bridge_ saveUnblindedTokenList:std::move(list) callback:callback]; } -void NativeLedgerClient::GetAllUnblindedTokens(ledger::GetAllUnblindedTokensCallback callback) { +void NativeLedgerClient::GetAllUnblindedTokens(ledger::GetUnblindedTokenListCallback callback) { return [bridge_ getAllUnblindedTokens:callback]; } void NativeLedgerClient::DeleteUnblindedTokens(const std::vector& id_list, ledger::ResultCallback callback) { @@ -282,3 +282,6 @@ void NativeLedgerClient::ReconcileStampReset() { [bridge_ reconcileStampReset]; } +void NativeLedgerClient::GetUnblindedTokensByPromotionType(const std::vector& promotion_types, ledger::GetUnblindedTokenListCallback callback) { + // no need to be implemented as just need it for 1.5 +} diff --git a/vendor/brave-ios/Ledger/Generated/NativeLedgerClientBridge.h b/vendor/brave-ios/Ledger/Generated/NativeLedgerClientBridge.h index ebec09b0e79d..63295142ec59 100644 --- a/vendor/brave-ios/Ledger/Generated/NativeLedgerClientBridge.h +++ b/vendor/brave-ios/Ledger/Generated/NativeLedgerClientBridge.h @@ -85,7 +85,7 @@ - (void)getPromotion:(const std::string&) id callback:(ledger::GetPromotionCallback)callback; - (void)deletePromotionList:(const std::vector&)id_list callback:(ledger::ResultCallback)callback; - (void)saveUnblindedTokenList:(ledger::UnblindedTokenList)list callback:(ledger::ResultCallback)callback; -- (void)getAllUnblindedTokens:(ledger::GetAllUnblindedTokensCallback)callback; +- (void)getAllUnblindedTokens:(ledger::GetUnblindedTokenListCallback)callback; - (void)deleteUnblindedTokens:(const std::vector&)list callback:(ledger::ResultCallback)callback; - (ledger::ClientInfoPtr)getClientInfo; - (void)unblindedTokensReady;