From 202ffa2b5bb8c2aa16dcabfe32a2065ca4224b4b Mon Sep 17 00:00:00 2001 From: brave-builds Date: Thu, 31 Mar 2022 16:06:17 +0000 Subject: [PATCH] Uplift of #12832 (squashed) to beta --- browser/ui/webui/brave_webui_source.cc | 2 + .../android_page/components/settingsPage.tsx | 12 ++++++ .../android_page/reducers/rewards_reducer.ts | 5 +++ .../android_page/reducers/wallet_reducer.ts | 5 +++ .../page/components/settingsPage.tsx | 11 ++++++ .../page/reducers/rewards_reducer.ts | 5 +++ .../resources/page/reducers/wallet_reducer.ts | 5 +++ components/definitions/rewards.d.ts | 1 + .../resources/brave_components_strings.grd | 2 + .../bat/ledger/public/interfaces/ledger.mojom | 3 +- .../bitflyer/bitflyer_authorization.cc | 1 + .../post_claim_bitflyer.cc | 2 + .../post_claim_bitflyer_unittest.cc | 22 +++++++++++ .../post_claim_gemini/post_claim_gemini.cc | 2 + .../post_claim_gemini_unittest.cc | 21 ++++++++++ .../post_claim_uphold/post_claim_uphold.cc | 2 + .../post_claim_uphold_unittest.cc | 23 +++++++++++ .../internal/gemini/gemini_authorization.cc | 1 + .../ledger/internal/logging/event_log_keys.h | 1 + .../ledger/internal/logging/event_log_util.cc | 6 ++- .../ledger/internal/uphold/uphold_unittest.cc | 38 ++++++++++++++++++- .../ledger/internal/uphold/uphold_wallet.cc | 1 + 22 files changed, 166 insertions(+), 5 deletions(-) diff --git a/browser/ui/webui/brave_webui_source.cc b/browser/ui/webui/brave_webui_source.cc index 4d81c3e31690..5acdb063cbb3 100644 --- a/browser/ui/webui/brave_webui_source.cc +++ b/browser/ui/webui/brave_webui_source.cc @@ -529,6 +529,8 @@ void CustomizeWebUIHTMLSource(const std::string &name, { "redirectModalKYCRequiredText", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_KYC_REQUIRED_TEXT }, // NOLINT { "redirectModalMismatchedProviderAccountsText", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_MISMATCHED_PROVIDER_ACCOUNTS_TEXT}, // NOLINT { "redirectModalMismatchedProviderAccountsTitle", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_MISMATCHED_PROVIDER_ACCOUNTS_TITLE}, // NOLINT + { "redirectModalRegionNotSupportedText", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_REGION_NOT_SUPPORTED_TEXT}, // NOLINT + { "redirectModalRegionNotSupportedTitle", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_REGION_NOT_SUPPORTED_TITLE}, // NOLINT { "redirectModalUpholdBATNotAllowedText", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_UPHOLD_BAT_NOT_ALLOWED_TEXT}, // NOLINT { "redirectModalUpholdBATNotAllowedTitle", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_UPHOLD_BAT_NOT_ALLOWED_TITLE}, // NOLINT { "redirectModalUpholdBlockedUserText", IDS_BRAVE_REWARDS_LOCAL_REDIRECT_MODAL_UPHOLD_BLOCKED_USER_TEXT}, // NOLINT diff --git a/components/brave_rewards/resources/android_page/components/settingsPage.tsx b/components/brave_rewards/resources/android_page/components/settingsPage.tsx index f936b5d30747..6634035b6406 100644 --- a/components/brave_rewards/resources/android_page/components/settingsPage.tsx +++ b/components/brave_rewards/resources/android_page/components/settingsPage.tsx @@ -269,6 +269,18 @@ class SettingsPage extends React.Component { onClick={this.actions.hideRedirectModal} /> ) + case 'regionNotSupportedModal': + return ( + + ) case 'show': return ( = (state: Rewards.State break } + if (data.result === 45) { // type::Result::REGION_NOT_SUPPORTED + ui.modalRedirect = 'regionNotSupportedModal' + break + } + if (data.result !== 0) { ui.modalRedirect = 'error' break diff --git a/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts b/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts index 24b7dec8f286..27042c2d0b4b 100644 --- a/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts +++ b/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts @@ -203,6 +203,11 @@ const walletReducer: Reducer = (state: Rewards.State, break } + if (action.payload.result === 45) { // type::Result::REGION_NOT_SUPPORTED + state.ui.modalRedirect = 'regionNotSupportedModal' + break + } + if (action.payload.result === 0) { // type::Result::LEDGER_OK chrome.send('brave_rewards.fetchBalance') } diff --git a/components/brave_rewards/resources/page/components/settingsPage.tsx b/components/brave_rewards/resources/page/components/settingsPage.tsx index c59f63aae0d4..2bc43edfc0d1 100644 --- a/components/brave_rewards/resources/page/components/settingsPage.tsx +++ b/components/brave_rewards/resources/page/components/settingsPage.tsx @@ -275,6 +275,17 @@ class SettingsPage extends React.Component { onClick={this.actions.hideRedirectModal} /> ) + case 'regionNotSupportedModal': + return ( + + ) case 'show': return ( = (state: Rewards.State break } + if (data.result === 45) { // type::Result::REGION_NOT_SUPPORTED + ui.modalRedirect = 'regionNotSupportedModal' + break + } + if (data.result !== 0) { ui.modalRedirect = 'error' break diff --git a/components/brave_rewards/resources/page/reducers/wallet_reducer.ts b/components/brave_rewards/resources/page/reducers/wallet_reducer.ts index 74780cbfcfbb..f0f1555ab2cd 100644 --- a/components/brave_rewards/resources/page/reducers/wallet_reducer.ts +++ b/components/brave_rewards/resources/page/reducers/wallet_reducer.ts @@ -213,6 +213,11 @@ const walletReducer: Reducer = (state: Rewards.State, break } + if (action.payload.result === 45) { // type::Result::REGION_NOT_SUPPORTED + state.ui.modalRedirect = 'regionNotSupportedModal' + break + } + if (action.payload.result === 0) { // type::Result::LEDGER_OK chrome.send('brave_rewards.fetchBalance') } diff --git a/components/definitions/rewards.d.ts b/components/definitions/rewards.d.ts index d172f58967e7..07961814b081 100644 --- a/components/definitions/rewards.d.ts +++ b/components/definitions/rewards.d.ts @@ -80,6 +80,7 @@ declare namespace Rewards { | 'hide' | 'kycRequiredModal' | 'mismatchedProviderAccountsModal' + | 'regionNotSupportedModal' | 'show' | 'upholdBATNotAllowedModal' | 'upholdBlockedUserModal' diff --git a/components/resources/brave_components_strings.grd b/components/resources/brave_components_strings.grd index f11bc6471a3e..7e3e7a7940f1 100644 --- a/components/resources/brave_components_strings.grd +++ b/components/resources/brave_components_strings.grd @@ -501,6 +501,8 @@ Error: You need a verified account to log in Hmm, it looks like your Brave Rewards has already been verified with another $1Uphold account. Please try verifying again using your previous account. Error: Different account + Unfortunately, your Brave Rewards cannot be verified because your region is not supported for Brave Rewards verification at this time. + Error: Region not supported BAT is not yet supported in your region on Uphold. Error: BAT unavailable Your account at Uphold is currently blocked. diff --git a/vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom b/vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom index 2cb33a212813..063d23870d70 100644 --- a/vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom +++ b/vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom @@ -249,7 +249,8 @@ enum Result { UPHOLD_TRANSACTION_VERIFICATION_FAILURE = 41, REQUEST_SIGNATURE_VERIFICATION_FAILURE = 42, UPHOLD_CUSTOMER_DUE_DILIGENCE_REQUIRED = 43, - FLAGGED_WALLET = 44 + FLAGGED_WALLET = 44, + REGION_NOT_SUPPORTED = 45 }; enum PublisherStatus { diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_authorization.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_authorization.cc index 59748ed1f46a..ef842f2b7d7b 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_authorization.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_authorization.cc @@ -193,6 +193,7 @@ void BitflyerAuthorization::OnClaimWallet( case type::Result::MISMATCHED_PROVIDER_ACCOUNTS: case type::Result::REQUEST_SIGNATURE_VERIFICATION_FAILURE: case type::Result::FLAGGED_WALLET: + case type::Result::REGION_NOT_SUPPORTED: ledger_->database()->SaveEventLog( log::GetEventLogKeyForLinkingResult(result), constant::kWalletBitflyer + std::string("/") + address.substr(0, 5)); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer.cc index 54c33fa0ca4b..d68002210309 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer.cc @@ -118,6 +118,8 @@ type::Result PostClaimBitflyer::ParseBody(const std::string& body) const { } else if (message->find("unable to link - unusual activity") != std::string::npos) { return type::Result::FLAGGED_WALLET; + } else if (message->find("region not supported") != std::string::npos) { + return type::Result::REGION_NOT_SUPPORTED; } else { BLOG(0, "Unknown message!"); return type::Result::LEDGER_ERROR; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer_unittest.cc index a6607ed62a50..b9a2223a2c4f 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_bitflyer/post_claim_bitflyer_unittest.cc @@ -91,6 +91,28 @@ TEST_F(PostClaimBitflyerTest, ServerError400FlaggedWallet) { }); } +TEST_F(PostClaimBitflyerTest, ServerError400RegionNotSupported) { + ON_CALL(*mock_ledger_client_, LoadURL(_, _)) + .WillByDefault(Invoke( + [](type::UrlRequestPtr request, client::LoadURLCallback callback) { + type::UrlResponse response; + response.status_code = 400; + response.url = request->url; + response.body = R"( +{ + "message": "region not supported: failed to validate account: invalid country", + "code": 400 +} + )"; + callback(response); + })); + + claim_->Request("83b3b77b-e7c3-455b-adda-e476fa0656d2", + [](type::Result result) { + EXPECT_EQ(result, type::Result::REGION_NOT_SUPPORTED); + }); +} + TEST_F(PostClaimBitflyerTest, ServerError400UnknownMessage) { ON_CALL(*mock_ledger_client_, LoadURL(_, _)) .WillByDefault(Invoke( diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini.cc index 02cbebe1c033..7f6d8a170a56 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini.cc @@ -119,6 +119,8 @@ type::Result PostClaimGemini::ParseBody(const std::string& body) const { } else if (message->find("unable to link - unusual activity") != std::string::npos) { return type::Result::FLAGGED_WALLET; + } else if (message->find("region not supported") != std::string::npos) { + return type::Result::REGION_NOT_SUPPORTED; } else { BLOG(0, "Unknown message!"); return type::Result::LEDGER_ERROR; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini_unittest.cc index 04ae44d2e8f2..b4dd8a9f10d1 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_gemini/post_claim_gemini_unittest.cc @@ -88,6 +88,27 @@ TEST_F(PostClaimGeminiTest, ServerError400FlaggedWallet) { }); } +TEST_F(PostClaimGeminiTest, ServerError400RegionNotSupported) { + ON_CALL(*mock_ledger_client_, LoadURL(_, _)) + .WillByDefault(Invoke( + [](type::UrlRequestPtr request, client::LoadURLCallback callback) { + type::UrlResponse response; + response.status_code = net::HTTP_BAD_REQUEST; + response.url = request->url; + response.body = R"( +{ + "message": "region not supported: failed to validate account: invalid country", + "code": 400 +} + )"; + callback(response); + })); + + claim_->Request("mock_linking_info", "id", [](type::Result result) { + EXPECT_EQ(result, type::Result::REGION_NOT_SUPPORTED); + }); +} + TEST_F(PostClaimGeminiTest, ServerError400UnknownMessage) { ON_CALL(*mock_ledger_client_, LoadURL(_, _)) .WillByDefault(Invoke( diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold.cc index aaa6e8c51a63..56f2154eab48 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold.cc @@ -177,6 +177,8 @@ type::Result PostClaimUphold::ParseBody(const std::string& body) const { } else if (message->find("unable to link - unusual activity") != std::string::npos) { return type::Result::FLAGGED_WALLET; + } else if (message->find("region not supported") != std::string::npos) { + return type::Result::REGION_NOT_SUPPORTED; } else { BLOG(0, "Unknown message!"); return type::Result::LEDGER_ERROR; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold_unittest.cc index 67aa0ca194b7..67161c4e5e44 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/post_claim_uphold/post_claim_uphold_unittest.cc @@ -84,6 +84,29 @@ TEST_F(PostClaimUpholdTest, ServerError400FlaggedWallet) { }); } +TEST_F(PostClaimUpholdTest, ServerError400RegionNotSupported) { + ON_CALL(*mock_ledger_client_, LoadURL(_, _)) + .WillByDefault(Invoke( + [](type::UrlRequestPtr request, client::LoadURLCallback callback) { + type::UrlResponse response; + response.status_code = 400; + response.url = request->url; + response.body = R"( +{ + "message": "region not supported: failed to validate account: invalid country", + "code": 400 +} + )"; + callback(response); + })); + + claim_->Request(30.0, "address", + [](type::Result result, const std::string& address) { + EXPECT_EQ(result, type::Result::REGION_NOT_SUPPORTED); + EXPECT_EQ(address, kExpectedAddress); + }); +} + TEST_F(PostClaimUpholdTest, ServerError400UnknownMessage) { ON_CALL(*mock_ledger_client_, LoadURL(_, _)) .WillByDefault(Invoke( diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini_authorization.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini_authorization.cc index 69f4ae4a7c35..41b32966fec2 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini_authorization.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/gemini/gemini_authorization.cc @@ -223,6 +223,7 @@ void GeminiAuthorization::OnClaimWallet( case type::Result::MISMATCHED_PROVIDER_ACCOUNTS: case type::Result::REQUEST_SIGNATURE_VERIFICATION_FAILURE: case type::Result::FLAGGED_WALLET: + case type::Result::REGION_NOT_SUPPORTED: ledger_->database()->SaveEventLog( log::GetEventLogKeyForLinkingResult(result), constant::kWalletGemini + std::string("/") + diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_keys.h b/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_keys.h index 529eabf668ac..0155475a4440 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_keys.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_keys.h @@ -20,6 +20,7 @@ const char kMismatchedProviderAccounts[] = "mismatched_provider_accounts"; const char kPromotionsClaimed[] = "promotion_claimed"; const char kRecurringTipAdded[] = "recurring_tip_added"; const char kRecurringTipRemoved[] = "recurring_tip_removed"; +const char kRegionNotSupported[] = "region_not_supported"; const char kRequestSignatureVerificationFailure[] = "request_signature_verification_failure"; const char kTransactionVerificationFailure[] = diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_util.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_util.cc index 7155bb7de041..e4c9e2d1e9c9 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_util.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/logging/event_log_util.cc @@ -12,16 +12,18 @@ std::string GetEventLogKeyForLinkingResult(type::Result result) { switch (result) { case type::Result::DEVICE_LIMIT_REACHED: return log::kDeviceLimitReached; + case type::Result::FLAGGED_WALLET: + return log::kFlaggedWallet; case type::Result::MISMATCHED_PROVIDER_ACCOUNTS: return log::kMismatchedProviderAccounts; case type::Result::NOT_FOUND: return log::kKYCRequired; + case type::Result::REGION_NOT_SUPPORTED: + return log::kRegionNotSupported; case type::Result::REQUEST_SIGNATURE_VERIFICATION_FAILURE: return log::kRequestSignatureVerificationFailure; case type::Result::UPHOLD_TRANSACTION_VERIFICATION_FAILURE: return log::kTransactionVerificationFailure; - case type::Result::FLAGGED_WALLET: - return log::kFlaggedWallet; default: NOTREACHED(); return ""; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_unittest.cc index 55ac59ff6a10..b48ba52d09bc 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/uphold/uphold_unittest.cc @@ -1272,8 +1272,42 @@ INSTANTIATE_TEST_SUITE_P( type::Result::FLAGGED_WALLET, type::WalletStatus::NOT_CONNECTED }, + LinkWalletParamType{ // Region not supported. + "05_region_not_supported", + R"({ "status": 5, "token": "0047c2fd8f023e067354dbdb5639ee67acf77150" })", + type::UrlResponse{ + {}, + {}, + net::HttpStatusCode::HTTP_OK, + R"({ "currencies": [ "BAT" ], "status": "ok", "memberAt": "2021-05-26T16:42:23.134Z" })", + {} + }, + type::UrlResponse{ + {}, + {}, + net::HttpStatusCode::HTTP_OK, + R"([ { "id": "962ef3b8-bc12-4619-a349-c8083931b795", "label": "Brave Browser" } ])", + {} + }, + false, + R"({ "payment_id": "f375da3c-c206-4f09-9422-665b8e5952db", "recovery_seed": "OG2zYotDSeZ81qLtr/uq5k/GC6WE5/7BclT1lHi4l+w=" })", + type::UrlResponse{ + {}, + {}, + net::HttpStatusCode::HTTP_BAD_REQUEST, + R"( + { + "message": "region not supported: failed to validate account: invalid country", + "code": 400 + } + )", + {} + }, + type::Result::REGION_NOT_SUPPORTED, + type::WalletStatus::NOT_CONNECTED + }, LinkWalletParamType{ // Rewards Link (Claim) Wallet failed. - "05_link_wallet_failed", + "06_link_wallet_failed", R"({ "status": 5, "token": "0047c2fd8f023e067354dbdb5639ee67acf77150" })", type::UrlResponse{ {}, @@ -1302,7 +1336,7 @@ INSTANTIATE_TEST_SUITE_P( type::WalletStatus::PENDING }, LinkWalletParamType{ // Happy path. - "06_happy_path", + "07_happy_path", R"({ "status": 5, "token": "0047c2fd8f023e067354dbdb5639ee67acf77150" })", type::UrlResponse{ {}, 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 97eecebee836..a50db93df9d2 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 @@ -273,6 +273,7 @@ void UpholdWallet::OnLinkWallet(const type::Result result, case type::Result::NOT_FOUND: // KYC required case type::Result::UPHOLD_TRANSACTION_VERIFICATION_FAILURE: case type::Result::FLAGGED_WALLET: + case type::Result::REGION_NOT_SUPPORTED: // Entering NOT_CONNECTED. ledger_->uphold()->DisconnectWallet(""); ledger_->database()->SaveEventLog(