From f4b5f3cff8c29b4aab31d1ef0d0cefd32045db63 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 14 Apr 2021 18:21:23 +0200 Subject: implement debug flag for allowing late withdrawal --- packages/taler-wallet-cli/bin/taler-wallet-cli | 2 +- packages/taler-wallet-cli/src/index.ts | 39 +++++++++++++++++++--- packages/taler-wallet-core/src/index.ts | 4 ++- .../taler-wallet-core/src/operations/withdraw.ts | 15 ++++++--- packages/taler-wallet-core/src/util/debugFlags.ts | 32 ++++++++++++++++++ 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 packages/taler-wallet-core/src/util/debugFlags.ts diff --git a/packages/taler-wallet-cli/bin/taler-wallet-cli b/packages/taler-wallet-cli/bin/taler-wallet-cli index 756de2027..ca8008e30 100755 --- a/packages/taler-wallet-cli/bin/taler-wallet-cli +++ b/packages/taler-wallet-cli/bin/taler-wallet-cli @@ -4,4 +4,4 @@ try { } catch (e) { // Do nothing. } -require('../dist/taler-wallet-cli.js').walletCli.run(); +require('../dist/taler-wallet-cli.js').main(); diff --git a/packages/taler-wallet-cli/src/index.ts b/packages/taler-wallet-cli/src/index.ts index 8865c3303..8b203a4cd 100644 --- a/packages/taler-wallet-cli/src/index.ts +++ b/packages/taler-wallet-cli/src/index.ts @@ -22,8 +22,30 @@ import fs from "fs"; import * as clk from "./clk.js"; import { deepStrictEqual } from "assert"; import { getTestInfo, runTests } from "./integrationtests/testrunner.js"; -import { PreparePayResultType, setDangerousTimetravel, classifyTalerUri, TalerUriType, RecoveryMergeStrategy, Amounts, addPaytoQueryParams, codecForList, codecForString } from "@gnu-taler/taler-util"; -import { Logger, Wallet, NodeHttpLib, getDefaultNodeWallet, OperationFailedAndReportedError, OperationFailedError, decodeCrock, rsaBlind, NodeThreadCryptoWorkerFactory, CryptoApi } from "@gnu-taler/taler-wallet-core"; +import { + PreparePayResultType, + setDangerousTimetravel, + classifyTalerUri, + TalerUriType, + RecoveryMergeStrategy, + Amounts, + addPaytoQueryParams, + codecForList, + codecForString, +} from "@gnu-taler/taler-util"; +import { + Logger, + Wallet, + NodeHttpLib, + getDefaultNodeWallet, + OperationFailedAndReportedError, + OperationFailedError, + decodeCrock, + rsaBlind, + NodeThreadCryptoWorkerFactory, + CryptoApi, + walletCoreDebugFlags, +} from "@gnu-taler/taler-wallet-core"; // This module also serves as the entry point for the crypto // thread worker, and thus must expose these two handlers. @@ -780,10 +802,10 @@ testCli help: "Glob pattern to select which tests to run", }) .maybeOption("suites", ["--suites"], clk.STRING, { - help: "Only run selected suites (string-separated list)" + help: "Only run selected suites (string-separated list)", }) .flag("dryRun", ["--dry"], { - help: "Only print tests that will be selected to run." + help: "Only print tests that will be selected to run.", }) .action(async (args) => { await runTests({ @@ -793,7 +815,6 @@ testCli }); }); - async function read(stream: NodeJS.ReadStream) { const chunks = []; for await (const chunk of stream) chunks.push(chunk); @@ -858,3 +879,11 @@ testCli.subcommand("cryptoworker", "cryptoworker").action(async (args) => { const res = await cryptoApi.hashString("foo"); console.log(res); }); + +export function main() { + if (process.env["TALER_WALLET_DEBUG_DENOMSEL_ALLOW_LATE"]) { + logger.warn("Allowing withdrawal of late denominations for debugging"); + walletCoreDebugFlags.denomselAllowLate = true; + } + walletCli.run(); +} diff --git a/packages/taler-wallet-core/src/index.ts b/packages/taler-wallet-core/src/index.ts index 1faf4e5fa..1f3901273 100644 --- a/packages/taler-wallet-core/src/index.ts +++ b/packages/taler-wallet-core/src/index.ts @@ -51,4 +51,6 @@ export * from "./util/promiseUtils"; export * from "./util/query"; export * from "./util/http"; -export * from "./pending-types"; \ No newline at end of file +export * from "./pending-types"; + +export * from "./util/debugFlags"; diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts index fcaa0e6d5..237ef9fc6 100644 --- a/packages/taler-wallet-core/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -20,6 +20,7 @@ import { AmountJson, Amounts, + durationFromSpec, parseWithdrawUri, Timestamp, } from "@gnu-taler/taler-util"; @@ -74,6 +75,7 @@ import { URL } from "../util/url"; import { TalerErrorCode } from "@gnu-taler/taler-util"; import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries"; import { compare } from "@gnu-taler/taler-util"; +import { walletCoreDebugFlags } from "../util/debugFlags.js"; /** * Logger for this file. @@ -174,10 +176,15 @@ interface ExchangeWithdrawDetails { export function isWithdrawableDenom(d: DenominationRecord): boolean { const now = getTimestampNow(); const started = timestampCmp(now, d.stampStart) >= 0; - const lastPossibleWithdraw = timestampSubtractDuraction( - d.stampExpireWithdraw, - { d_ms: 50 * 1000 }, - ); + let lastPossibleWithdraw: Timestamp; + if (walletCoreDebugFlags.denomselAllowLate) { + lastPossibleWithdraw = d.stampExpireWithdraw; + } else { + lastPossibleWithdraw = timestampSubtractDuraction( + d.stampExpireWithdraw, + durationFromSpec({ minutes: 5 }), + ); + } const remaining = getDurationRemaining(lastPossibleWithdraw, now); const stillOkay = remaining.d_ms !== 0; return started && stillOkay && !d.isRevoked; diff --git a/packages/taler-wallet-core/src/util/debugFlags.ts b/packages/taler-wallet-core/src/util/debugFlags.ts new file mode 100644 index 000000000..cea249d27 --- /dev/null +++ b/packages/taler-wallet-core/src/util/debugFlags.ts @@ -0,0 +1,32 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** + * Debug flags for wallet-core. + * + * @author Florian Dold + */ + +export interface WalletCoreDebugFlags { + /** + * Allow withdrawal of denominations even though they are about to expire. + */ + denomselAllowLate: boolean; +} + +export const walletCoreDebugFlags: WalletCoreDebugFlags = { + denomselAllowLate: false, +}; -- cgit v1.2.3