Skip to content

Commit 9e87dcf

Browse files
committed
Adds recovery path for may payout problem
Resolves brave/brave-browser#9684
1 parent 32bdee8 commit 9e87dcf

File tree

15 files changed

+291
-15
lines changed

15 files changed

+291
-15
lines changed

components/brave_rewards/common/pref_names.cc

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

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,8 @@ enum PromotionStatus {
360360
ACTIVE = 0,
361361
ATTESTED = 1,
362362
FINISHED = 4,
363-
OVER = 5
363+
OVER = 5,
364+
CORRUPTED = 6
364365
};
365366

366367
struct Promotion {
@@ -443,7 +444,8 @@ enum CredsBatchStatus {
443444
BLINDED = 1,
444445
CLAIMED = 2,
445446
SIGNED = 3,
446-
FINISHED = 4
447+
FINISHED = 4,
448+
CORRUPTED = 5
447449
};
448450

449451
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/database/database.cc

+25
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,18 @@ void Database::UpdateCredsBatchStatus(
201201
creds_batch_->UpdateStatus(trigger_id, trigger_type, status, callback);
202202
}
203203

204+
void Database::UpdateCredsBatchesStatus(
205+
const std::vector<std::string>& trigger_ids,
206+
const ledger::CredsBatchType trigger_type,
207+
const ledger::CredsBatchStatus status,
208+
ledger::ResultCallback callback) {
209+
creds_batch_->UpdateRecordsStatus(
210+
trigger_ids,
211+
trigger_type,
212+
status,
213+
callback);
214+
}
215+
204216
/**
205217
* MEDIA PUBLISHER INFO
206218
*/
@@ -296,6 +308,13 @@ void Database::UpdatePromotionStatus(
296308
promotion_->UpdateStatus(promotion_id, status, callback);
297309
}
298310

311+
void Database::UpdatePromotionsStatus(
312+
const std::vector<std::string>& promotion_ids,
313+
const ledger::PromotionStatus status,
314+
ledger::ResultCallback callback) {
315+
promotion_->UpdateRecordsStatus(promotion_ids, status, callback);
316+
}
317+
299318
void Database::PromotionCredentialCompleted(
300319
const std::string& promotion_id,
301320
ledger::ResultCallback callback) {
@@ -314,6 +333,12 @@ void Database::GetPromotionListByType(
314333
promotion_->GetRecordsByType(types, callback);
315334
}
316335

336+
void Database::UpdatePromotionsBlankPublicKey(
337+
const std::vector<std::string>& ids,
338+
ledger::ResultCallback callback) {
339+
promotion_->UpdateRecordsBlankPublicKey(ids, callback);
340+
}
341+
317342
/**
318343
* PUBLISHER INFO
319344
*/

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

+15
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ class Database {
140140
const ledger::CredsBatchStatus status,
141141
ledger::ResultCallback callback);
142142

143+
void UpdateCredsBatchesStatus(
144+
const std::vector<std::string>& trigger_ids,
145+
const ledger::CredsBatchType trigger_type,
146+
const ledger::CredsBatchStatus status,
147+
ledger::ResultCallback callback);
148+
143149
/**
144150
* MEDIA PUBLISHER INFO
145151
*/
@@ -207,6 +213,11 @@ class Database {
207213
const ledger::PromotionStatus status,
208214
ledger::ResultCallback callback);
209215

216+
void UpdatePromotionsStatus(
217+
const std::vector<std::string>& promotion_ids,
218+
const ledger::PromotionStatus status,
219+
ledger::ResultCallback callback);
220+
210221
void PromotionCredentialCompleted(
211222
const std::string& promotion_id,
212223
ledger::ResultCallback callback);
@@ -219,6 +230,10 @@ class Database {
219230
const std::vector<ledger::PromotionType>& types,
220231
ledger::GetPromotionListCallback callback);
221232

233+
void UpdatePromotionsBlankPublicKey(
234+
const std::vector<std::string>& ids,
235+
ledger::ResultCallback callback);
236+
222237
/**
223238
* PUBLISHER INFO
224239
*/

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
@@ -1719,6 +1719,13 @@ void LedgerImpl::UpdatePromotionStatus(
17191719
bat_database_->UpdatePromotionStatus(promotion_id, status, callback);
17201720
}
17211721

1722+
void LedgerImpl::UpdatePromotionsStatus(
1723+
const std::vector<std::string>& promotion_ids,
1724+
const ledger::PromotionStatus status,
1725+
ledger::ResultCallback callback) {
1726+
bat_database_->UpdatePromotionsStatus(promotion_ids, status, callback);
1727+
}
1728+
17221729
void LedgerImpl::PromotionCredentialCompleted(
17231730
const std::string& promotion_id,
17241731
ledger::ResultCallback callback) {
@@ -1758,4 +1765,22 @@ void LedgerImpl::UpdateCredsBatchStatus(
17581765
callback);
17591766
}
17601767

1768+
void LedgerImpl::UpdateCredsBatchesStatus(
1769+
const std::vector<std::string>& trigger_ids,
1770+
const ledger::CredsBatchType trigger_type,
1771+
const ledger::CredsBatchStatus status,
1772+
ledger::ResultCallback callback) {
1773+
bat_database_->UpdateCredsBatchesStatus(
1774+
trigger_ids,
1775+
trigger_type,
1776+
status,
1777+
callback);
1778+
}
1779+
1780+
void LedgerImpl::UpdatePromotionsBlankPublicKey(
1781+
const std::vector<std::string>& ids,
1782+
ledger::ResultCallback callback) {
1783+
bat_database_->UpdatePromotionsBlankPublicKey(ids, callback);
1784+
}
1785+
17611786
} // namespace bat_ledger

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

+15
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,11 @@ class LedgerImpl : public ledger::Ledger {
710710
const ledger::PromotionStatus status,
711711
ledger::ResultCallback callback);
712712

713+
void UpdatePromotionsStatus(
714+
const std::vector<std::string>& promotion_ids,
715+
const ledger::PromotionStatus status,
716+
ledger::ResultCallback callback);
717+
713718
void PromotionCredentialCompleted(
714719
const std::string& promotion_id,
715720
ledger::ResultCallback callback);
@@ -732,6 +737,16 @@ class LedgerImpl : public ledger::Ledger {
732737
const ledger::CredsBatchStatus status,
733738
ledger::ResultCallback callback);
734739

740+
void UpdateCredsBatchesStatus(
741+
const std::vector<std::string>& trigger_ids,
742+
const ledger::CredsBatchType trigger_type,
743+
const ledger::CredsBatchStatus status,
744+
ledger::ResultCallback callback);
745+
746+
void UpdatePromotionsBlankPublicKey(
747+
const std::vector<std::string>& ids,
748+
ledger::ResultCallback callback);
749+
735750
private:
736751
void InitializeConfirmations(
737752
const bool execute_create_script,

0 commit comments

Comments
 (0)