aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-04-14 18:21:23 +0200
committerFlorian Dold <florian@dold.me>2021-04-14 18:21:23 +0200
commitf4b5f3cff8c29b4aab31d1ef0d0cefd32045db63 (patch)
tree3f27375b097edeae35010d5642ea964969001f98
parent14f13250a01ad15d9fb1ba956fc5409c7f76a2fa (diff)
implement debug flag for allowing late withdrawal
-rwxr-xr-xpackages/taler-wallet-cli/bin/taler-wallet-cli2
-rw-r--r--packages/taler-wallet-cli/src/index.ts39
-rw-r--r--packages/taler-wallet-core/src/index.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts15
-rw-r--r--packages/taler-wallet-core/src/util/debugFlags.ts32
5 files changed, 81 insertions, 11 deletions
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 <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * 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,
+};