Skip to content

Commit 722ce54

Browse files
committed
Adds recovery path for may payout problem
Resolves brave/brave-browser#9684
1 parent d60bf7e commit 722ce54

File tree

16 files changed

+295
-15
lines changed

16 files changed

+295
-15
lines changed

components/brave_rewards/common/pref_names.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const char kUseRewardsStagingServer[] = "brave.rewards.use_staging_server";
3434
const char kStatePromotionLastFetchStamp[] =
3535
"brave.rewards.promotion_last_fetch_stamp";
3636
const char kStatePromotionCorruptedMigrated[] =
37-
"brave.rewards.promotion_corrupted_migrated";
37+
"brave.rewards.promotion_corrupted_migrated2";
3838
const char kStateAnonTransferChecked[] = "brave.rewards.anon_transfer_checked";
3939
} // namespace prefs
4040
} // namespace brave_rewards

vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom

+4-2
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ enum PromotionStatus {
368368
ACTIVE = 0,
369369
ATTESTED = 1,
370370
FINISHED = 4,
371-
OVER = 5
371+
OVER = 5,
372+
CORRUPTED = 6
372373
};
373374

374375
struct Promotion {
@@ -452,7 +453,8 @@ enum CredsBatchStatus {
452453
BLINDED = 1,
453454
CLAIMED = 2,
454455
SIGNED = 3,
455-
FINISHED = 4
456+
FINISHED = 4,
457+
CORRUPTED = 5
456458
};
457459

458460
struct CredsBatch {

vendor/bat-native-ledger/src/bat/ledger/internal/credentials/credentials_promotion.cc

+4
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ void CredentialsPromotion::OnStart(
102102
callback(ledger::Result::LEDGER_OK);
103103
break;
104104
}
105+
case ledger::CredsBatchStatus::CORRUPTED: {
106+
callback(ledger::Result::LEDGER_ERROR);
107+
break;
108+
}
105109
}
106110
}
107111

vendor/bat-native-ledger/src/bat/ledger/internal/credentials/credentials_sku.cc

+4
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ void CredentialsSKU::OnStart(
135135
callback(ledger::Result::LEDGER_OK);
136136
break;
137137
}
138+
case ledger::CredsBatchStatus::CORRUPTED: {
139+
callback(ledger::Result::LEDGER_ERROR);
140+
break;
141+
}
138142
}
139143
}
140144

vendor/bat-native-ledger/src/bat/ledger/internal/database/database.cc

+25
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,18 @@ void Database::UpdateCredsBatchStatus(
214214
creds_batch_->UpdateStatus(trigger_id, trigger_type, status, callback);
215215
}
216216

217+
void Database::UpdateCredsBatchesStatus(
218+
const std::vector<std::string>& trigger_ids,
219+
const ledger::CredsBatchType trigger_type,
220+
const ledger::CredsBatchStatus status,
221+
ledger::ResultCallback callback) {
222+
creds_batch_->UpdateRecordsStatus(
223+
trigger_ids,
224+
trigger_type,
225+
status,
226+
callback);
227+
}
228+
217229
/**
218230
* MEDIA PUBLISHER INFO
219231
*/
@@ -309,6 +321,13 @@ void Database::UpdatePromotionStatus(
309321
promotion_->UpdateStatus(promotion_id, status, callback);
310322
}
311323

324+
void Database::UpdatePromotionsStatus(
325+
const std::vector<std::string>& promotion_ids,
326+
const ledger::PromotionStatus status,
327+
ledger::ResultCallback callback) {
328+
promotion_->UpdateRecordsStatus(promotion_ids, status, callback);
329+
}
330+
312331
void Database::PromotionCredentialCompleted(
313332
const std::string& promotion_id,
314333
ledger::ResultCallback callback) {
@@ -327,6 +346,12 @@ void Database::GetPromotionListByType(
327346
promotion_->GetRecordsByType(types, callback);
328347
}
329348

349+
void Database::UpdatePromotionsBlankPublicKey(
350+
const std::vector<std::string>& ids,
351+
ledger::ResultCallback callback) {
352+
promotion_->UpdateRecordsBlankPublicKey(ids, callback);
353+
}
354+
330355
/**
331356
* PUBLISHER INFO
332357
*/

vendor/bat-native-ledger/src/bat/ledger/internal/database/database.h

+15
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ class Database {
146146
const ledger::CredsBatchStatus status,
147147
ledger::ResultCallback callback);
148148

149+
void UpdateCredsBatchesStatus(
150+
const std::vector<std::string>& trigger_ids,
151+
const ledger::CredsBatchType trigger_type,
152+
const ledger::CredsBatchStatus status,
153+
ledger::ResultCallback callback);
154+
149155
/**
150156
* MEDIA PUBLISHER INFO
151157
*/
@@ -213,6 +219,11 @@ class Database {
213219
const ledger::PromotionStatus status,
214220
ledger::ResultCallback callback);
215221

222+
void UpdatePromotionsStatus(
223+
const std::vector<std::string>& promotion_ids,
224+
const ledger::PromotionStatus status,
225+
ledger::ResultCallback callback);
226+
216227
void PromotionCredentialCompleted(
217228
const std::string& promotion_id,
218229
ledger::ResultCallback callback);
@@ -225,6 +236,10 @@ class Database {
225236
const std::vector<ledger::PromotionType>& types,
226237
ledger::GetPromotionListCallback callback);
227238

239+
void UpdatePromotionsBlankPublicKey(
240+
const std::vector<std::string>& ids,
241+
ledger::ResultCallback callback);
242+
228243
/**
229244
* PUBLISHER INFO
230245
*/

vendor/bat-native-ledger/src/bat/ledger/internal/database/database_creds_batch.cc

+33
Original file line numberDiff line numberDiff line change
@@ -378,4 +378,37 @@ void DatabaseCredsBatch::UpdateStatus(
378378
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
379379
}
380380

381+
void DatabaseCredsBatch::UpdateRecordsStatus(
382+
const std::vector<std::string>& trigger_ids,
383+
const ledger::CredsBatchType trigger_type,
384+
const ledger::CredsBatchStatus status,
385+
ledger::ResultCallback callback) {
386+
if (trigger_ids.empty()) {
387+
callback(ledger::Result::LEDGER_ERROR);
388+
return;
389+
}
390+
391+
auto transaction = ledger::DBTransaction::New();
392+
393+
const std::string query = base::StringPrintf(
394+
"UPDATE %s SET status = ? WHERE trigger_id IN (%s) AND trigger_type = ?",
395+
kTableName,
396+
GenerateStringInCase(trigger_ids).c_str());
397+
398+
auto command = ledger::DBCommand::New();
399+
command->type = ledger::DBCommand::Type::RUN;
400+
command->command = query;
401+
402+
BindInt(command.get(), 0, static_cast<int>(status));
403+
BindInt(command.get(), 1, static_cast<int>(trigger_type));
404+
405+
transaction->commands.push_back(std::move(command));
406+
407+
auto transaction_callback = std::bind(&OnResultCallback,
408+
_1,
409+
callback);
410+
411+
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
412+
}
413+
381414
} // namespace braveledger_database

vendor/bat-native-ledger/src/bat/ledger/internal/database/database_creds_batch.h

+6
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ class DatabaseCredsBatch: public DatabaseTable {
4141
const ledger::CredsBatchStatus status,
4242
ledger::ResultCallback callback);
4343

44+
void UpdateRecordsStatus(
45+
const std::vector<std::string>& trigger_ids,
46+
const ledger::CredsBatchType trigger_type,
47+
const ledger::CredsBatchStatus status,
48+
ledger::ResultCallback callback);
49+
4450
private:
4551
bool CreateTableV18(ledger::DBTransaction* transaction);
4652

vendor/bat-native-ledger/src/bat/ledger/internal/database/database_promotion.cc

+53
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,36 @@ void DatabasePromotion::UpdateStatus(
469469
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
470470
}
471471

472+
void DatabasePromotion::UpdateRecordsStatus(
473+
const std::vector<std::string>& ids,
474+
const ledger::PromotionStatus status,
475+
ledger::ResultCallback callback) {
476+
if (ids.empty()) {
477+
callback(ledger::Result::LEDGER_ERROR);
478+
return;
479+
}
480+
481+
const std::string query = base::StringPrintf(
482+
"UPDATE %s SET status = ? WHERE promotion_id IN (%s)",
483+
kTableName,
484+
GenerateStringInCase(ids).c_str());
485+
486+
auto transaction = ledger::DBTransaction::New();
487+
auto command = ledger::DBCommand::New();
488+
command->type = ledger::DBCommand::Type::RUN;
489+
command->command = query;
490+
491+
BindInt(command.get(), 0, static_cast<int>(status));
492+
493+
transaction->commands.push_back(std::move(command));
494+
495+
auto transaction_callback = std::bind(&OnResultCallback,
496+
_1,
497+
callback);
498+
499+
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
500+
}
501+
472502
void DatabasePromotion::CredentialCompleted(
473503
const std::string& promotion_id,
474504
ledger::ResultCallback callback) {
@@ -623,4 +653,27 @@ void DatabasePromotion::GetRecordsByType(
623653
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
624654
}
625655

656+
void DatabasePromotion::UpdateRecordsBlankPublicKey(
657+
const std::vector<std::string>& ids,
658+
ledger::ResultCallback callback) {
659+
const std::string query = base::StringPrintf(
660+
"UPDATE %s as p SET public_keys = "
661+
"(SELECT PRINTF('[\"%%s\"]', public_key) FROM creds_batch as cb "
662+
"WHERE cb.trigger_id = p.promotion_id) WHERE p.promotion_id IN (%s)",
663+
kTableName,
664+
GenerateStringInCase(ids).c_str());
665+
666+
auto transaction = ledger::DBTransaction::New();
667+
auto command = ledger::DBCommand::New();
668+
command->type = ledger::DBCommand::Type::EXECUTE;
669+
command->command = query;
670+
transaction->commands.push_back(std::move(command));
671+
672+
auto transaction_callback = std::bind(&OnResultCallback,
673+
_1,
674+
callback);
675+
676+
ledger_->RunDBTransaction(std::move(transaction), transaction_callback);
677+
}
678+
626679
} // namespace braveledger_database

vendor/bat-native-ledger/src/bat/ledger/internal/database/database_promotion.h

+9
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ class DatabasePromotion: public DatabaseTable {
5151
const ledger::PromotionStatus status,
5252
ledger::ResultCallback callback);
5353

54+
void UpdateRecordsStatus(
55+
const std::vector<std::string>& ids,
56+
const ledger::PromotionStatus status,
57+
ledger::ResultCallback callback);
58+
5459
void CredentialCompleted(
5560
const std::string& promotion_id,
5661
ledger::ResultCallback callback);
@@ -59,6 +64,10 @@ class DatabasePromotion: public DatabaseTable {
5964
const std::vector<ledger::PromotionType>& types,
6065
ledger::GetPromotionListCallback callback);
6166

67+
void UpdateRecordsBlankPublicKey(
68+
const std::vector<std::string>& ids,
69+
ledger::ResultCallback callback);
70+
6271
private:
6372
bool CreateTableV10(ledger::DBTransaction* transaction);
6473

vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc

+25
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,13 @@ void LedgerImpl::UpdatePromotionStatus(
17101710
bat_database_->UpdatePromotionStatus(promotion_id, status, callback);
17111711
}
17121712

1713+
void LedgerImpl::UpdatePromotionsStatus(
1714+
const std::vector<std::string>& promotion_ids,
1715+
const ledger::PromotionStatus status,
1716+
ledger::ResultCallback callback) {
1717+
bat_database_->UpdatePromotionsStatus(promotion_ids, status, callback);
1718+
}
1719+
17131720
void LedgerImpl::PromotionCredentialCompleted(
17141721
const std::string& promotion_id,
17151722
ledger::ResultCallback callback) {
@@ -1744,6 +1751,18 @@ void LedgerImpl::UpdateCredsBatchStatus(
17441751
callback);
17451752
}
17461753

1754+
void LedgerImpl::UpdateCredsBatchesStatus(
1755+
const std::vector<std::string>& trigger_ids,
1756+
const ledger::CredsBatchType trigger_type,
1757+
const ledger::CredsBatchStatus status,
1758+
ledger::ResultCallback callback) {
1759+
bat_database_->UpdateCredsBatchesStatus(
1760+
trigger_ids,
1761+
trigger_type,
1762+
status,
1763+
callback);
1764+
}
1765+
17471766
void LedgerImpl::SaveSKUOrder(
17481767
ledger::SKUOrderPtr order,
17491768
ledger::ResultCallback callback) {
@@ -1831,4 +1850,10 @@ void LedgerImpl::GetSpendableUnblindedTokensByBatchTypes(
18311850
callback);
18321851
}
18331852

1853+
void LedgerImpl::UpdatePromotionsBlankPublicKey(
1854+
const std::vector<std::string>& ids,
1855+
ledger::ResultCallback callback) {
1856+
bat_database_->UpdatePromotionsBlankPublicKey(ids, callback);
1857+
}
1858+
18341859
} // namespace bat_ledger

vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h

+15
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,11 @@ class LedgerImpl : public ledger::Ledger {
660660
const ledger::PromotionStatus status,
661661
ledger::ResultCallback callback);
662662

663+
void UpdatePromotionsStatus(
664+
const std::vector<std::string>& promotion_ids,
665+
const ledger::PromotionStatus status,
666+
ledger::ResultCallback callback);
667+
663668
void PromotionCredentialCompleted(
664669
const std::string& promotion_id,
665670
ledger::ResultCallback callback);
@@ -680,6 +685,12 @@ class LedgerImpl : public ledger::Ledger {
680685
const ledger::CredsBatchStatus status,
681686
ledger::ResultCallback callback);
682687

688+
void UpdateCredsBatchesStatus(
689+
const std::vector<std::string>& trigger_ids,
690+
const ledger::CredsBatchType trigger_type,
691+
const ledger::CredsBatchStatus status,
692+
ledger::ResultCallback callback);
693+
683694
void SaveSKUOrder(ledger::SKUOrderPtr order, ledger::ResultCallback callback);
684695

685696
void SaveSKUTransaction(
@@ -733,6 +744,10 @@ class LedgerImpl : public ledger::Ledger {
733744
const std::vector<ledger::CredsBatchType>& batch_types,
734745
ledger::GetUnblindedTokenListCallback callback);
735746

747+
void UpdatePromotionsBlankPublicKey(
748+
const std::vector<std::string>& ids,
749+
ledger::ResultCallback callback);
750+
736751
private:
737752
void MaybeInitializeConfirmations(
738753
const bool execute_create_script,

0 commit comments

Comments
 (0)