From 19f3e6321d68adbaf9e8ca2d03efac6706d3fdea Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sun, 9 Oct 2022 02:23:06 +0200 Subject: wallet-core: put contract terms into separate object store --- .../src/operations/backup/export.ts | 17 ++++++-- .../src/operations/backup/import.ts | 47 ++++++---------------- 2 files changed, 26 insertions(+), 38 deletions(-) (limited to 'packages/taler-wallet-core/src/operations/backup') diff --git a/packages/taler-wallet-core/src/operations/backup/export.ts b/packages/taler-wallet-core/src/operations/backup/export.ts index d16b344f6..2e2a1c4b4 100644 --- a/packages/taler-wallet-core/src/operations/backup/export.ts +++ b/packages/taler-wallet-core/src/operations/backup/export.ts @@ -88,6 +88,7 @@ export async function exportBackup( x.exchanges, x.exchangeDetails, x.coins, + x.contractTerms, x.denominations, x.purchases, x.refreshGroups, @@ -353,7 +354,7 @@ export async function exportBackup( const purchaseProposalIdSet = new Set(); - await tx.purchases.iter().forEach((purch) => { + await tx.purchases.iter().forEachAsync(async (purch) => { const refunds: BackupRefundItem[] = []; purchaseProposalIdSet.add(purch.proposalId); for (const refundKey of Object.keys(purch.refunds)) { @@ -418,8 +419,18 @@ export async function exportBackup( }; } + let contractTermsRaw = undefined; + if (purch.download) { + const contractTermsRecord = await tx.contractTerms.get( + purch.download.contractTermsHash, + ); + if (contractTermsRecord) { + contractTermsRaw = contractTermsRecord.contractTermsRaw; + } + } + backupPurchases.push({ - contract_terms_raw: purch.download?.contractTermsRaw, + contract_terms_raw: contractTermsRaw, auto_refund_deadline: purch.autoRefundDeadline, merchant_pay_sig: purch.merchantPaySig, pay_info: backupPayInfo, @@ -428,7 +439,7 @@ export async function exportBackup( timestamp_accepted: purch.timestampAccept, timestamp_first_successful_pay: purch.timestampFirstSuccessfulPay, nonce_priv: purch.noncePriv, - merchant_sig: purch.download?.contractData.merchantSig, + merchant_sig: purch.download?.contractTermsMerchantSig, claim_token: purch.claimToken, merchant_base_url: purch.merchantBaseUrl, order_id: purch.orderId, diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts index bb5fe56e2..3ee3680fe 100644 --- a/packages/taler-wallet-core/src/operations/backup/import.ts +++ b/packages/taler-wallet-core/src/operations/backup/import.ts @@ -64,6 +64,7 @@ import { checkLogicInvariant } from "../../util/invariants.js"; import { GetReadOnlyAccess, GetReadWriteAccess } from "../../util/query.js"; import { makeCoinAvailable, makeEventId, TombstoneTag } from "../common.js"; import { getExchangeDetails } from "../exchanges.js"; +import { extractContractData } from "../pay-merchant.js"; import { provideBackupState } from "./state.js"; const logger = new Logger("operations/backup/import.ts"); @@ -630,49 +631,25 @@ export async function importBackup( maxWireFee = Amounts.getZero(amount.currency); } const download: ProposalDownload = { - contractData: { - amount, - contractTermsHash: contractTermsHash, - fulfillmentUrl: parsedContractTerms.fulfillment_url ?? "", - merchantBaseUrl: parsedContractTerms.merchant_base_url, - merchantPub: parsedContractTerms.merchant_pub, - merchantSig: backupPurchase.merchant_sig!, - orderId: parsedContractTerms.order_id, - summary: parsedContractTerms.summary, - autoRefund: parsedContractTerms.auto_refund, - maxWireFee, - payDeadline: parsedContractTerms.pay_deadline, - refundDeadline: parsedContractTerms.refund_deadline, - wireFeeAmortization: - parsedContractTerms.wire_fee_amortization || 1, - allowedAuditors: parsedContractTerms.auditors.map((x) => ({ - auditorBaseUrl: x.url, - auditorPub: x.auditor_pub, - })), - allowedExchanges: parsedContractTerms.exchanges.map((x) => ({ - exchangeBaseUrl: x.url, - exchangePub: x.master_pub, - })), - timestamp: parsedContractTerms.timestamp, - wireMethod: parsedContractTerms.wire_method, - wireInfoHash: parsedContractTerms.h_wire, - maxDepositFee: Amounts.parseOrThrow(parsedContractTerms.max_fee), - merchant: parsedContractTerms.merchant, - products: parsedContractTerms.products, - summaryI18n: parsedContractTerms.summary_i18n, - deliveryDate: parsedContractTerms.delivery_date, - deliveryLocation: parsedContractTerms.delivery_location, - }, - contractTermsRaw: backupPurchase.contract_terms_raw, + contractTermsHash, + contractTermsMerchantSig: backupPurchase.merchant_sig!, + currency: amount.currency, + fulfillmentUrl: backupPurchase.contract_terms_raw.fulfillment_url, }; + const contractData = extractContractData( + backupPurchase.contract_terms_raw, + contractTermsHash, + download.contractTermsMerchantSig, + ); + let payInfo: PurchasePayInfo | undefined = undefined; if (backupPurchase.pay_info) { payInfo = { coinDepositPermissions: undefined, payCoinSelection: await recoverPayCoinSelection( tx, - download.contractData, + contractData, backupPurchase.pay_info, ), payCoinSelectionUid: backupPurchase.pay_info.pay_coins_uid, -- cgit v1.2.3