From ab9a5e1e8ac60bbf55104e84490e581dfad5de02 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 1 Feb 2023 13:00:12 -0300 Subject: fix #7552, add next_url from the tip information when accepting tips --- packages/taler-util/src/backup-types.ts | 5 +++++ packages/taler-util/src/taler-types.ts | 3 +++ packages/taler-util/src/wallet-types.ts | 1 + packages/taler-wallet-core/src/db.ts | 4 ++++ packages/taler-wallet-core/src/operations/backup/export.ts | 1 + packages/taler-wallet-core/src/operations/backup/import.ts | 1 + packages/taler-wallet-core/src/operations/tip.ts | 9 +++++++-- 7 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/taler-util/src/backup-types.ts b/packages/taler-util/src/backup-types.ts index b3c6b5515..0a355b65f 100644 --- a/packages/taler-util/src/backup-types.ts +++ b/packages/taler-util/src/backup-types.ts @@ -668,6 +668,11 @@ export interface BackupTip { */ selected_denoms: BackupDenomSel; + /** + * The url to be redirected after the tip is accepted. + */ + next_url: string | undefined; + /** * UID for the denomination selection. * Used to disambiguate when merging. diff --git a/packages/taler-util/src/taler-types.ts b/packages/taler-util/src/taler-types.ts index 8b680bdd9..a9303ed9c 100644 --- a/packages/taler-util/src/taler-types.ts +++ b/packages/taler-util/src/taler-types.ts @@ -905,6 +905,8 @@ export class TipPickupGetResponse { exchange_url: string; + next_url?: string; + expiration: TalerProtocolTimestamp; } @@ -1464,6 +1466,7 @@ export const codecForTipPickupGetResponse = (): Codec => buildCodecForObject() .property("tip_amount", codecForString()) .property("exchange_url", codecForString()) + .property("next_url", codecOptional(codecForString())) .property("expiration", codecForTimestamp) .build("TipPickupGetResponse"); diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts index b7a51de9e..d57a221f3 100644 --- a/packages/taler-util/src/wallet-types.ts +++ b/packages/taler-util/src/wallet-types.ts @@ -379,6 +379,7 @@ export interface PrepareTipResult { export interface AcceptTipResponse { transactionId: string; + next_url?: string; } export const codecForPrepareTipResult = (): Codec => diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts index 6a42cabcb..78c73fba5 100644 --- a/packages/taler-wallet-core/src/db.ts +++ b/packages/taler-wallet-core/src/db.ts @@ -821,6 +821,10 @@ export interface TipRecord { createdTimestamp: TalerProtocolTimestamp; + /** + * The url to be redirected after the tip is accepted. + */ + next_url: string | undefined; /** * Timestamp for when the wallet finished picking up the tip * from the merchant. diff --git a/packages/taler-wallet-core/src/operations/backup/export.ts b/packages/taler-wallet-core/src/operations/backup/export.ts index a66444485..3dd4e0e32 100644 --- a/packages/taler-wallet-core/src/operations/backup/export.ts +++ b/packages/taler-wallet-core/src/operations/backup/export.ts @@ -190,6 +190,7 @@ export async function exportBackup( merchant_base_url: tip.merchantBaseUrl, merchant_tip_id: tip.merchantTipId, wallet_tip_id: tip.walletTipId, + next_url: tip.next_url, secret_seed: tip.secretSeed, selected_denoms: tip.denomsSel.selectedDenoms.map((x) => ({ count: x.count, diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts index c94eb7eb6..c1be1d4d9 100644 --- a/packages/taler-wallet-core/src/operations/backup/import.ts +++ b/packages/taler-wallet-core/src/operations/backup/import.ts @@ -824,6 +824,7 @@ export async function importBackup( acceptedTimestamp: backupTip.timestamp_accepted, createdTimestamp: backupTip.timestamp_created, denomsSel, + next_url: backupTip.next_url, exchangeBaseUrl: backupTip.exchange_base_url, merchantBaseUrl: backupTip.exchange_base_url, merchantTipId: backupTip.merchant_tip_id, diff --git a/packages/taler-wallet-core/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/tip.ts index dabde9f62..2bf216102 100644 --- a/packages/taler-wallet-core/src/operations/tip.ts +++ b/packages/taler-wallet-core/src/operations/tip.ts @@ -130,6 +130,7 @@ export async function prepareTip( tipAmountRaw: Amounts.stringify(amount), tipExpiration: tipPickupStatus.expiration, exchangeBaseUrl: tipPickupStatus.exchange_url, + next_url: tipPickupStatus.next_url, merchantBaseUrl: res.merchantBaseUrl, createdTimestamp: TalerProtocolTimestamp.now(), merchantTipId: res.merchantTipId, @@ -355,17 +356,21 @@ export async function acceptTip( const tipRecord = await tx.tips.get(tipId); if (!tipRecord) { logger.error("tip not found"); - return false; + return undefined; } tipRecord.acceptedTimestamp = TalerProtocolTimestamp.now(); await tx.tips.put(tipRecord); - return true; + return tipRecord; }); + if (found) { await processTip(ws, tipId); } + //FIXME: if tip is not found the behavior of the function is the same + // as the tip was found and finished return { transactionId: makeTransactionId(TransactionType.Tip, tipId), + next_url: found?.next_url, }; } -- cgit v1.2.3